简单横道图Demo

代码:

@{
    ViewBag.Title = "横道图";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<style type="text/css">
    div
    {
        font-family: 微软雅黑;
    }

    #chart
    {
        float: left;
        height: 300px;
        padding-left: 1px;
        border-bottom: solid 1px #aaa;
        background: url(/Content/Styles/imgs/ganttbar.png) center left repeat-y;
        overflow: hidden;
    }

    .div-day-box
    {
        float: left;
        width: 28px;
        height: 28px;
        border: solid 1px #aaa;
        margin-left: -1px;
        margin-top: -1px;
        line-height: 30px;
        text-align: center;
    }

    .div-month:first-child
    {
        padding-left: 1px;
    }

    .div-month
    {
        float: left;
        margin-left: -1px;
        height: 89px;
        overflow: hidden;
    }

    .div-month-title
    {
        float: left;
        height: 30px;
        width: 100%;
        margin-left: -1px;
        text-align: center;
        line-height: 28px;
    }

    .div-month-title div
    {
        border-left: solid 1px #aaa;
        border-right: solid 1px #aaa;
        border-top: solid 1px #aaa;
        font-size: 16px;
    }

    .div-bar-box
    {
        float: left;
        width: 30px;
        height: 30px;
        margin-left: -1px;
        margin-top: -1px;
        line-height: 30px;
        text-align: center;
        background: url(/Content/Styles/imgs/ganttbar.png) center right no-repeat;
    }

    .div-bar-box-inner
    {
        margin-top: 8px;
        width: 30px;
        height: 12px;
    }

    .table-main td
    {
        border: solid 1px #aaa;
    }

    .table-title
    {
        margin-top: 63px;
    }

    .table-title td
    {
        height: 28px;
        border: solid 1px #aaa;
        text-align: center;
    }

    .table-title tr td:last-child
    {
        border-right: none;
    }
</style>
<script type="text/javascript">
    $(function () {
        $("#div-container").find("div:first").width($("#div-container").width());
        createChart();
    });

    //重新生成
    function createChart() {
        $("#chart").html("");
        setTimeout(function () {
            var sumWidth = createMonthsChart(‘2015-06‘, ‘2016-02‘);
            createBar(sumWidth, ‘2015-06‘, ‘2015-06-20‘, ‘2015-06-29‘, ‘2016-02‘);
            createBar(sumWidth, ‘2015-06‘, ‘2015-06-22‘, ‘2015-07-04‘, ‘2016-02‘);
            createBar(sumWidth, ‘2015-06‘, ‘2015-06-30‘, ‘2015-07-08‘, ‘2016-02‘);
            createBar(sumWidth, ‘2015-06‘, ‘2015-06-29‘, ‘2015-07-06‘, ‘2016-02‘);
            createBar(sumWidth, ‘2015-06‘, ‘2015-06-27‘, ‘2015-07-15‘, ‘2016-02‘);
            createBar(sumWidth, ‘2015-06‘, ‘2015-06-26‘, ‘2015-07-18‘, ‘2016-02‘);
            createBar(sumWidth, ‘2015-06‘, ‘2015-07-11‘, ‘2015-07-28‘, ‘2016-02‘);
            createBar(sumWidth, ‘2015-06‘, ‘2015-07-13‘, ‘2015-07-26‘, ‘2016-02‘);
            $("#chart").height(87 + 29 * 8);
        }, 100);
    }

    //生成时间条
    var colorIndex = 1;
    function createBar(sumWidth, globalStart, start, end, globalEnd) {
        var globalStartArr = globalStart.split(‘-‘);
        var globalEndArr = globalEnd.split(‘-‘);
        var startArr = start.split(‘-‘);
        var endArr = end.split(‘-‘);
        var globalStartDate = new Date(parseInt(globalStartArr[0]), parseInt(globalStartArr[1]) - 1, 1);
        var globalEndDate = new Date(parseInt(globalEndArr[0]), parseInt(globalEndArr[1]) - 1, getDaysOfMonth(parseInt(globalEndArr[0]), parseInt(globalEndArr[1])));
        var startDate = new Date(parseInt(startArr[0]), parseInt(startArr[1]) - 1, parseInt(startArr[2]));
        var endDate = new Date(parseInt(endArr[0]), parseInt(endArr[1]) - 1, parseInt(endArr[2]));
        var days1 = (startDate - globalStartDate) / (1000 * 60 * 60 * 24);
        var days2 = (endDate - startDate) / (1000 * 60 * 60 * 24);
        var days3 = (globalEndDate - endDate) / (1000 * 60 * 60 * 24);
        var html = ‘‘;
        for (var i = 1; i <= days1; i++) {
            html += ‘<div class="div-bar-box"></div>‘;
        }
        for (var i = 1; i <= days2 + 1; i++) {
            html += ‘<div class="div-bar-box"><div class="div-bar-box-inner" style="background-color:‘ + getColor(colorIndex) + ‘;"></div></div>‘;
        }
        colorIndex += 1;
        if (colorIndex > 2) colorIndex = 1;
        for (var i = 1; i <= days3; i++) {
            html += ‘<div class="div-bar-box"></div>‘;
        }
        $("#chart").append(html);
    }

    //生成连续月份图表
    function createMonthsChart(start, end) {
        var sumWidth = 0;
        var startArr = start.split(‘-‘);
        var endArr = end.split(‘-‘);
        if (startArr[0] == endArr[0]) { //同一年
            for (var i = parseInt(startArr[1]); i <= parseInt(endArr[1]); i++) {
                sumWidth += createMonthChart(parseInt(startArr[0]), i) - 1; //-1表示div-month的一个margin-left像素
            }
        }
        else { //跨年
            for (var j = parseInt(startArr[1]); j <= 12; j++) {
                sumWidth += createMonthChart(parseInt(startArr[0]), j) - 1; //-1表示div-month的一个margin-left像素
            }
            for (var i = parseInt(startArr[0]) + 1; i < parseInt(endArr[0]); i++) {
                for (var j = 1; j <= 12; j++) {
                    sumWidth += createMonthChart(i, j) - 1; //-1表示div-month的一个margin-left像素
                }
            }
            for (var j = 1; j <= parseInt(endArr[1]); j++) {
                sumWidth += createMonthChart(parseInt(endArr[0]), j) - 1; //-1表示div-month的一个margin-left像素
            }
        }
        sumWidth += 1; //+1表示第一个div-month的一个padding-left像素
        $("#chart").width(sumWidth);
        return sumWidth;
    }

    //生成当月图表
    function createMonthChart(year, month) {
        var week = getWeek(year, month, 1);
        var dayCount = getDaysOfMonth(year, month);
        var html = ‘‘;

        //月份容器和标题
        html += ‘<div class="div-month" ><div class="div-month-title" ><div>‘ + year + ‘年 ‘ + month + ‘月</div></div>‘;

        //星期
        for (var i = 0; i < dayCount; i++) {
            var weekShow = getWeekShow(week);
            week++;
            if (week > 6) week = 0;
            html += ‘<div class="div-day-box">‘ + weekShow + ‘</div>‘;
        }

        //日期
        for (var i = 0; i < dayCount; i++) {
            html += ‘<div class="div-day-box">‘ + (i + 1) + ‘</div>‘;
        }

        html += ‘</div>‘;
        $("#chart").append(html);

        var boxWidth = 29; //box算上两边的边框一共30
        var boxsWidth = boxWidth * dayCount + 1;
        $("#chart").find(".div-month:last").width(boxsWidth);
        return boxsWidth;
    }

    //获取当月天数
    function getDaysOfMonth(year, month) {
        var d = new Date(year, month, 0);
        return d.getDate();
    }

    //获取当天星期数
    function getWeek(year, month, day) {
        var d = new Date(year, month - 1, day);
        return d.getDay();
    }

    //星期转换
    function getWeekShow(i) {
        switch (i) {
            case 0:
                return "日";
            case 1:
                return "一";
            case 2:
                return "二";
            case 3:
                return "三";
            case 4:
                return "四";
            case 5:
                return "五";
            case 6:
                return "六";
        }
        return "error";
    }

    //颜色
    function getColor(i) {
        switch (i) {
            case 1:
                return "#00aa00";
            case 2:
                return "#cc0000";
        }
        return "#000";
    }
</script>
<table class="table-main" cellpadding="0" cellspacing="0" style="width: 100%; border-collapse: collapse;">
    <tr>
        <td style="width: 240px; vertical-align: top;">
            <table class="table-title" cellpadding="0" cellspacing="0" style="width: 100%; border-collapse: collapse;">
                <tr>
                    <td>
                        部门
                    </td>
                    <td>
                        控制节点
                    </td>
                    <td>
                    </td>
                </tr>
                <tr>
                    <td rowspan="2">
                        项目部
                    </td>
                    <td rowspan="2">
                        下发设计任务单
                    </td>
                    <td>
                        计划
                    </td>
                </tr>
                <tr>
                    <td>
                        实际
                    </td>
                </tr>
                <tr>
                    <td rowspan="2">
                        项目部
                    </td>
                    <td rowspan="2">
                        组织召开项目定义会
                    </td>
                    <td>
                        计划
                    </td>
                </tr>
                <tr>
                    <td>
                        实际
                    </td>
                </tr>
                <tr>
                    <td rowspan="2">
                        设计部
                    </td>
                    <td rowspan="2">
                        加工图设计一阶段
                    </td>
                    <td>
                        计划
                    </td>
                </tr>
                <tr>
                    <td>
                        实际
                    </td>
                </tr>
                <tr>
                    <td rowspan="2">
                        项目部
                    </td>
                    <td rowspan="2">
                        加工图一阶段深化设计
                    </td>
                    <td>
                        计划
                    </td>
                </tr>
                <tr>
                    <td>
                        实际
                    </td>
                </tr>
            </table>
        </td>
        <td id="div-container">
            <div style="width: 1000px; height: 400px; padding: 5px; overflow: scroll;">
                <div id="chart">
                </div>
            </div>
        </td>
    </tr>
</table>

效果图:

时间: 2024-10-10 00:46:08

简单横道图Demo的相关文章

EXCEL 2007施工进度横道图制作步骤及实战练习

[知识讲解] 1.将图表中的部分图形“隐藏”起来 如果为了实现某种特殊的图表效果,需要将图表中的部分图形“隐藏”起来,除了将该系列删除外(有时候这种方法不能达到所需要的效果),还可以通过下面的方法来实现. 步骤1:在图表中选中需要“隐藏”的图表图形. 步骤2:切换到“图表工具/格式”菜单选项卡中. 步骤3:单击“形状样式”组中的“形状填充”下拉按钮,在随后出现的下拉列表中,选择“无填充颜色”选项即可. 2.调整图表图形宽度 对于柱形.条形等图表来说,如果用户觉得图形的宽度不太合适,可以通过下面的

Spring MVC +MyBatis +MySQL 简单的登录查询 Demo 解决了mybatis异常

忙活了大半天,饭也没顾得上吃,哎许久不动手,一动手就出事,下面请看今天的重头戏,额吃个饭回来再发了! 1.整体结构 2.准备工作 数据库: --Mysql 5.6 创建数据库 wolf CREATE DATABASE wolf; 创建用户表 user create table user( id int  AUTO_INCREMENT  primary key, name varchar(25) not null, pwd varchar(20) not null, create_time dat

Unity3D ShaderLab 简单的立方体图反射

Unity3D ShaderLab 简单的立方体图反射 反射是着色器模拟现实环境的一个关键因素,它能使我们的着色器渲染效果更加具备视觉冲击,因为他利用了我们周围的环境, 让着色器反射外界的场景信息并将他们反射到材质表面来模拟外部环境,所以我们会使用立方图[CubeMap]的6张纹理来模拟环境的色彩情况. 首先,创建Shader,创建材质球,准备立方图,双击Shader,进入代码编辑器. 从Properties 到CGPROGRAM,再到surf,本次功能较为简单,先看代码. code start

一个简单的Webservice的demo,简单模拟服务

前段时间一直在学习WCF,匆匆忙忙的把<WCF全面解析>和<WCF服务编程>看了一遍,好多东西都不是很懂,又听了一下WCF分布式开发的网络教程,算是马马虎虎的明白点了.回顾了一下Webservice,将二者进行比较学习.考虑到以后的发展,当时决定学习WCF,希望自己在不久的将来能将WCF学的稍微精通点吧.这几天又将Webservice看了一遍,回想当时学习Webservice处处碰到坑,由于没人指点,连最基本地点发布都折腾好长时间,只能一点一点的填坑跳坑.这几天闲了,想写一个简单的

利用KBEngine +U3D 做的一个简单MMO手游Demo

利用KBE +U3D 做的一个简单MMO手游Demo目前只完成到一个普通攻击和一个火球术,  火球术需要点击怪物后才能释放.点击npc后会跳到一个副本.里面有一只半兽人. 欢迎大家来试玩 并提出宝贵意见.http://pan.baidu.com/s/1dDtVjnb 感谢kbe 一直以来的帮助.

8.ARM寄存器详细解说ARM寄存器的简单分类:图1-1:

8.ARM寄存器详细解说 ARM寄存器的简单分类:图1-1: 图1-1 ARM微处理器中共有37个32位寄存器,其中31个通用寄存器,6个状态寄存器.但是这些寄存器不能被同时访问,在七种模式中,可以访问的寄存器种类不同.但是,通用寄存器R14--R0.程序计数器PC.一个状态寄存器cpsr都是可以被访问的. 具体的情况如下图1-2所示: 图1-2 寄存器分类: ????1.不分组通用寄存器: R0-R7是不分组寄存器.所谓不分组就是在七种模式下的任意一种模式都访问同一个物理寄存器地址.就是不分组

一个简单的webservice的demo(下)winform异步调用webservice

绕了一大圈,又开始接触winform的项目来了,虽然很小吧.写一个winform的异步调用webservice的demo,还是简单的. 一个简单的Webservice的demo,简单模拟服务 一个简单的Webservice的demo(中)_前端页面调用 当winform同步调用服务时,由于调用服务不能像C/S那样快,winform的UI进程一直在等待服务的返回结果,就无法响应用户事件.为了解决这种问题,我们用异步调用. 首先,先准备一个模拟用的webservice,如下: 1 using Sys

原生js简单轮播图 代码

在团队带人,突然被人问到轮播图如何实现,进入前端领域有一年多了,但很久没自己写过,一直是用大牛写的插件,今天就写个简单的适合入门者学习的小教程.当然,轮播图的实现原理与设计模式有很多种,我这里讲的是用面向过程函数式编程去实现,相对于面向对象设计模式,代码难免会显得臃肿冗余.但没有面向对象的抽象却很适合新手理解与学习.已经在BAT的同学看到希望少喷点.另外可以多提意见. 轮播图的原理: 一系列的大小相等的图片平铺,利用CSS布局只显示一张图片,其余隐藏.通过计算偏移量利用定时器实现自动播放,或通过

有什么简单识别提取图中文字的方法

生活中常常会遇到从图中摘抄部分文字应用到别的地方的时候,但是逐一打字的话会很麻烦,而且还耽误时间,那有什么简单识别提取图中文字的方法呢?下面就一起来看下吧! 操作步骤: 1:首先我们需要在电脑中安装一款支持图片文字识别的软件,来帮助进行下面的操作,小编在这里就选择一种为大家演示. 2:将迅捷OCR文字识别软件打开,打开后点击极速识别选项卡. 3:进入操作界面后,点击添加文件按钮便可将所需识别的图片添加进来. ![](https://s1.51cto.com/images/blog/201904/