课程表插件Timetables(原创)

所属分类:输入-日期和时间

 59917  358  查看评论 (26)
分享到微信朋友圈
X
课程表插件Timetables(原创) ie兼容9

Timetables

安装

npm install timetables

直接引入

或者直接引入该地址下Timetables.min.js

使用

import Timetables from 'timetablestim';
let Timetable;
// 在可以获取到真实dom节点到周期里进行实例化
var courseList = [
        ['语文','语文','英语','物理','语文','数学','英语','物理','物理','数学','英语','物理'],
        ['数学','语文','物理','物理','语文','语文','语文','物理','数学','语文','语文','体育'],
        ['语文','数学','英语','物理','语文','数学','英语','物理','语文','数学','英语','物理'],
        ['数学','语文','物理','物理','语文','语文','语文','英语','数学','语文','语文','体育'],
        ['语文','数学','英语','物理','语文','数学','英语','物理','语文','数学','英语','物理'],
 ];
Timetable = new Timetables({
    el: '#coursesTable',
    timetables: courseList,
    week: ['一', '二', '三', '四', '五'],
    timetableType: [
        ['上午', 4],
        ['下午', 4],
        ['晚上', 4]
    ],
});

参数及方法

参数or方法类型说明
elString(必传)绑定dom节点的id('#id')
timetablesArray(必传)日程表内容,格式为二维数组
weekArray(必传)日程表头部周,格式为二维数组
timetableTypeArray(必传)日程表左侧分类,格式为二维数组
highlightWeekNumber传入表头当天的索引,为日程表头部高亮某周增加一个class(可自定义样式)
stylesObject日程表内容样式,具体使用见下文
mergeBoolean是否合并一天内临近的相同日程(默认为true)
gridOnClickFunction单元格点击触发事件,方法参数中可获取到该格的信息
setOptionFunction实例化上的方法, 重新设置参数渲染表格,参数同上(没有el参数)

参数示例

var timetables = [
        ['大学英语(Ⅳ)@10203','大学英语(Ⅳ)@10203','','','','','毛概@14208','毛概@14208','','','','选修'],
        ['','','信号与系统@11302','信号与系统@11302','模拟电子技术基础@16204','模拟电子技术基础@16204','','','','','',''],
        ['大学体育(Ⅳ)','大学体育(Ⅳ)','形势与政策(Ⅳ)@15208','形势与政策(Ⅳ)@15208','','','电路、信号与系统实验','电路、信号与系统实验','','','',''],
        ['','','','','电装实习@11301','电装实习@11301','','','','大学体育','大学体育',''],
        ['','','数据结构与算法分析','数据结构与算法分析','','','','','信号与系统','信号与系统','',''],
];
var timetableType = [
        [{index: '1',name: '8:30'}, 1],
        [{index: '2',name: '9:30'}, 1],
        [{index: '3',name: '10:30'}, 1],
        [{index: '4',name: '11:30'}, 1],
        [{index: '5',name: '12:30'}, 1],
        [{index: '6',name: '14:30'}, 1],
        [{index: '7',name: '15:30'}, 1],
        [{index: '8',name: '16:30'}, 1],
        [{index: '9',name: '17:30'}, 1],
        [{index: '10',name: '18:30'}, 1],
        [{index: '11',name: '19:30'}, 1],
        [{index: '12',name: '20:30'}, 1]
];
var week =  ['周一', '周二', '周三', '周四', '周五'];
var highlightWeek = new Date().getDay();
var styles = {
    Gheight: 50,
    leftHandWidth: 50,
    palette: ['#ff6633', '#eeeeee']
};
// 实例化(初始化课表)
var Timetable = new Timetables({
    el: '#coursesTable',
    timetables: timetables,
    week: week,
    timetableType: timetableType,
    highlightWeek: highlightWeek,
    gridOnClick: function (e) {
      alert(e.name + '  ' + e.week +', 第' + e.index + '节课, 课长' + e.length +'节')
      console.log(e)
    },
    styles: styles
});
//重新设置参数 渲染
function onChange() {
  Timetable.setOption({
    timetables: courseListOther,
    week: ['一', '二', '三', '四', '五', '六', '日'],
    styles:{
      palette: ['#dedcda', '#ff4081']
    },
    timetableType:courseType,
    gridOnClick: function (e) {
      console.log(e)
    }})
};
  • timetables 参数为表格内容项,格式为二维数组,数组第二维中每项长度需要和timetableType 中每一项的长度的累计总和一致, 长度不足时会自动以空字符串追加补全。

  • 同一天内临近的日程相同时会自动合并为一格展示(设置merge参数为false时不自动合并)。

  • timetableType 参数可以将表格内容分类,数组内的每一项为该行标签,用于分隔行。

  • 每项中第一项可以是字符串或者一个对象,当为对象时会自动生成多项dom节点。

  • 第二项为要分类的长度,所有长度累计总和应该与timetables参数中每一项的保持长度一致。

  • week 参数为表格列名,将内容依次分隔为相应列数

  • highlightWeek 参数为数字索引(从1开始),索引对应你上面week参数里的项,传入索引后会在表格头对应节点加上一个class

  • styles 参数为表格表格样式:

  • Gheight 为表格内每一个单元格高度(number)单位为'px' 

  • leftHandWidth 为表格左侧日程分类样式宽带度(number)单位为'px'

  • palette 为合并相同课程单元格后颜色调色盘,默认有15种颜色,可以传入颜色数组自定义(传入的颜色会与默认颜色合并,并优先使用自定义颜色),设为false时不为课程单元格生成色盘颜色

  • setOption 在实例化对象上可以使用setOption方法重新渲染表格。参数使用同上,不需要再传入el参数绑定dom,默认使用实例化时候的dom节点

  • 日程表没有过多进行样式装饰,可以根据已有的css类自行美化。有课程内容的节点会绑定名为course-hasContent的class,课程行单元会根据timetableType的分类对应生成**stage_***的class,

相关插件-日期和时间

jQuery日历展示,选取时间控件(原创)

该插件可以展示日历并监听点击事件,同时可以在input 框调用日期选择控件。
  日期和时间
 36574  301
  日期和时间
 78765  453

jQuery渐进数字时间钟

jQuery渐进数字时间钟,透明度随距离的远近渐进渐变。
  日期和时间
 17038  228

选择生日,弹出框pc插件可直接输入,可上下移动,成功有回调

插件是非要弄成一样的效果,无奈写了1个,原创作品作者分享给大家看下
  日期和时间
 27339  297

讨论这个项目(26)回答他人问题或分享插件使用方法奖励jQ币 评论用户自律公约

    'CHENY 0
    2023/7/4 18:23:38
    很不错,拿来改了一下很好用 回复
    say what 0
    2021/3/17 15:16:50
    博主,后台返回来的id放在哪里,因为到时候,弹窗框要根据这个ID,查修改的的数据,显示再弹窗框上,再进行,修改添加。 回复
    小学生 0
    2020/6/1 9:47:45
    问下这个能多表头吗?
        醉无常0
        2020/6/8 20:37:16
        不能
    回复
    O_O66948 0
    2020/5/27 14:18:14
    想问一下,怎么做到点击对应的课程使那个框子变色 回复
    喜酒 0
    2020/4/16 14:11:37

    二维数组里面可以是对象吗  因为点击需要获取单元格的id 获取详情 弹窗展示

    courseList: [
        [ //周一的课
            {
                id: "1",
                name: "语文"
            },
            {
                id: "2",
                name: "数学"
            },
            .........
        ]
    ]
        飞翔的荷兰人1
        2020/4/26 10:56:50
        不支持,但是点击单元格可以返回当前在周几和课程的index,你可以根据这两个值在课表数组中查询
    回复
    O_O66948 0
    2020/4/15 9:55:08
    请问一下,点击的时候怎么获取左边的小时,要使用e.??
        飞翔的荷兰人0
        2020/4/26 10:58:52
        点击课表会返回课程的index ,根据index可以在左边小时数组中中查到对应的
    回复
    牌哥 0
    2020/1/10 15:10:37
    你好 我先创建二维数组 在添加数据 会报错
        飞翔的荷兰人1
        2020/4/26 11:00:04
        更新使用setOption方法
    回复
    Silent guardian 0
    2019/12/11 11:10:47
    怎么用到小程序中 回复
    0
    2019/10/15 14:22:47
    在vue中怎么使用呢,mounted里面调用报错 回复
    灰色的世界 0
    2019/9/10 18:20:20
    我现在是一直引不进去 回复
😃
  • 😀
  • 😉
  • 😥
  • 😵
  • 😫
  • 😘
  • 😡
  • 👍
  • 🌹
  • 👏
  • 🍺
  • 🍉
  • 🌙
  • 💖
  • 💔
😃
  • 😀
  • 😉
  • 😥
  • 😵
  • 😫
  • 😘
  • 😡
  • 👍
  • 🌹
  • 👏
  • 🍺
  • 🍉
  • 🌙
  • 💖
  • 💔
取消回复