GithubHelp home page GithubHelp logo

zwhgithub / vue-calendar Goto Github PK

View Code? Open in Web Editor NEW
939.0 19.0 229.0 2.85 MB

🏆 基于 vue 2.0 开发的轻量,高性能日历组件

Home Page: https://zwhgithub.github.io/vue-calendar/dist/#/

JavaScript 70.98% Vue 28.19% HTML 0.84%
vue-calendar vue-datepicker calendar-component vue2-calendar vue2-datepicker calendar datepicker

vue-calendar's Introduction

vue-calendar-component

  • 基于 vue 2.0 开发的轻量,高性能日历组件
  • 占用内存小,性能好,样式好看,可扩展性强
  • 原生 js 开发,没引入第三方库

Why

  • Github 上很多点击弹出日历选择某个时间的组件,却没有找到单纯展示日历并且能点击获取时间的组件
  • 少部分日历组件的占用内存过于大,对于日历这样简单的功能来说显然不够合理

Demo

效果 或者请用浏览器的手机模式查看

效果

效果

  • 🎉 觉得好用给一个 star 哦~~ 🎉

Install

npm i vue-calendar-component --save
cnpm i vue-calendar-component --save  //国内镜像

github地址 详细文档

Usage

//vue文件中引入
import Calendar from 'vue-calendar-component';

 components: {
    Calendar
  }
    <Calendar
      v-on:choseDay="clickDay"
      v-on:changeMonth="changeDate"
      // v-on:isToday="clickToday"
      // :markDate=arr // arr=['2018/4/1','2018/4/3'] 标记4月1日和4月3日 简单标记
      //:markDateMore=arr // 多种不同的标记
      // 第一个标记和第二个标记不能同时使用
      // :agoDayHide='1514937600' //某个日期以前的不允许点击  时间戳10位
      // :futureDayHide='1525104000' //某个日期以后的不允许点击  时间戳10位
      // :sundayStart="true" //默认是周一开始 当是true的时候 是周日开始
    ></Calendar>

    clickDay(data) {
      console.log(data); //选中某天
    },
    changeDate(data) {
      console.log(data); //左右点击切换月份
    },
    clickToday(data) {
      console.log(data); // 跳到了本月
    }

  // 多个标记示例
  arr=[{date:'2018/4/1',className:"mark1"}, {date:'2018/4/13',className:"mark2"}];
  //4月1 标记的className是mark1 根据class做出一些标记样式

API

属性 说明 默认 是否必传
choseDay 选中某天调用的方法,返回选中的日期 YY-MM-DD
changeMonth 切换月份调用的方法,返回切换到某月的日期 YY-MM-DD
isToday 切换月份的时候,如果切到当前月份,调用这个方法,返回当前月今天
markDate 如果需要某月的几天被标注,传当月的日期数组。如["2018/2/2","2018/2/6"]被会标注(相同的标记) 空数组
markDateMore 需要不同的标记如上Usage 最后一行示例代码 空数组
agoDayHide 某个日期以前的不允许点击 时间戳长度是 10 位 0
futureDayHide 某个日期以后的不允许点击 时间戳长度是 10 位 很大
sundayStart 默认是周一开始 当是true的时候 是周日开始 false
textTop 日历头部的文字,默认是 [ '日','一', '二', '三', '四', '五', '六'] ,可以根据自己的需求进行不同的修改。 ---
  Calendar标签上添加 ref 属性, 暴露出三个方法可以 直接切换月份
例如: <Calendar ref="Calendar"></Calendar>

       this.$refs.Calendar.PreMonth();  //调用方法实现转到上个月
       this.$refs.Calendar.NextMonth(); //调用方法实现转到下个月
       this.$refs.Calendar.ChoseMonth('2018-12-12'); //调用方法实现转到某个月
       this.$refs.Calendar.ChoseMonth('2018-12-12',false); //跳转到18年12月12日 但是不选中当天
      //第二个参数 false表示不选中日期 。

遇到错误---

  • 遇到提示UglifyJs打包编译错误。 因为当前版本UglifyJs不知道编译es6

解决方法 npm install --save-dev babel-preset-env
然后在根目录创建一个 .babelrc 文件 在输入,
{ "presets": ["env"] }
保存 重新build就OK了

babel-preset-env官方文档

Other

  • src 下面的 App.vue 有 demo 可以参考
  • 如果有其他问题或者版本上, 功能上不兼容的 邮件沟通 [email protected],请具体 标明问题。

vue-calendar's People

Contributors

zwhgithub avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vue-calendar's Issues

新增这个依赖 打包报错了

ERROR in build.66dc435cce02233d.js from UglifyJs
Unexpected token operator «=», expected punc «,» [./node_modules/vue-calendar-component/lib/calendar.js:21,0][build.66dc435cce02233d.js:144214,37] 现在有这个报错了 我的项目打包npm run test

希望添加以下功能

  1. 指定日期(或者是today)之前的日期不可选。
  2. 切换月份的method,即可以调用方法进行跳转。

动态设置显示时间

能否暴露一个参数设置插件当前显示的时间,这样就能从外部传入需要显示的时间。
ps: 手动将myDate参数放入props中,然后从外部传入参数,貌似不生效。
调用this.$refs.Calendar.PreMonth(); 和this.$refs.Calendar.NextMonth();这两个方法不传入一个时间对象,就会报错。

发现markDate有个小地方需要完善

image
image
如图可知,如果日期格式中个位数是以两个数字表示的,markDate无法识别,即‘2018/6/01’无法识别,如果写出‘2018/6/1’便可以识别,辛苦大佬完善一下这个美中不足之处。

还想补充一点,这种‘2018-6-1’的格式也无法识别呢。

目前版本2.5.0

能不能增加默认选中某天的功能

通过vue路由跳转带的日期参数到日历页,希望根据日期参数默认改变当前参数日期的样式,即给当前参数日期的class加上wh_chose_day,样式和点击选中时保持一致,目前是非要有点击事件,日历才会给class加上wh_chose_day。类似其他同学提的v-model功能

ref 属性 引用的函数并没有跳转月份

<Calendar :markDateMore=arr :sundayStart="true" :ref="Calendar" v-on:choseDay="clickDay" v-on:changeMonth="changeDate"></Calendar>
methods: { Calendar(){ this.$refs.Calendar.NextMonth() } }

返回时间格式

月份和日用两位数表示就好了, 返回时间格式多样化就更好了

设置以周日开始时出现bug

内容已经是周日开始了,但是头部的文字还是以周一开始,不知道别人有没有这个问题,我看之前没人提issue
image

ref属性暴露出来的那三个方法都没有效

//html
<Calendar
v-if="calendarVisible"
ref="Calendar"
:markDateMore="markDate"
@changeMonth="changeMonth"
@choseDay="choseDay"
>

//methods
showCalendar(){
this.calendarVisible = true
this.$refs.Calendar.PreMonth()
},

//报错
Error in v-on handler: "TypeError: Cannot read property 'PreMonth' of undefined"

markDateMore属性修改时出现的BUG

如果我需要动态修改markDateMore时候,视图将不会立即更新。例如1号的markBgColor是red,默认没有颜色,当color是red的时候点击去掉颜色,当没有颜色的时候需要添加颜色。
我仅仅只需要动态修改markDateMore中1号的className即可,但是实际情况是点击之后不会变动,需要再次点击视图才会更新。
查看了源码发现在watch中markDateMore并没有用监测对象的方式,修改成以下方式即可
markDateMore: { handler(val, oldVal) { this.getList(this.myDate); }, deep: true },
顺便希望作者能够在下一版中加上周的背景class,像这样
<div class="wh_content wh_top"> <div class="wh_content_item" v-for="tag in textTop"> <div class="wh_top_tag"> {{tag}} </div> </div> </div>

某个月份的月末一个星期都是灰色

只要在js文件里的
// 下个月末尾的一些日期
getRightArr(date) 方法里添加判断就解决。。。
当上个月月末和当前月的加起来是7的整数的话,_length就等于7了
在for循环外添加if(_length !=7)就不会渲染出一个星期都是灰色了。
每个月的月前也是这样,一连7天都是灰色,方法都一样
完整代码:
月前 如下
月末
getRightArr(date) {
const arr = [];
const nextDate = this.getOtherMonth(date, 'nextMonth');
const leftLength = this.getDaysInOneMonth(date) + this.getMonthweek(date);
const _length = 7 - leftLength % 7;
if(_length !=7){
for (let i = 0; i < _length; i++) {
const nowTime = nextDate.getFullYear() + '/' + (nextDate.getMonth() + 1) + '/' + (i + 1);
arr.push({
id: i + 1,
date: nowTime,
isToday: false,
otherMonth: 'nextMonth',
});
}
}

return arr;

},

当前日期在切换月份再切回来后高亮会消失

当前日期在切换月份再切回来后高亮会消失,同样的,点击一个日期高亮,切换月份再回来高亮也会消失。
看到有人有同样类似的问题,每个人需求都不大一样。
所以可不可以设置一个属性,让用户自己选择是否保持住高亮标记?

时间戳问题

设置了时间戳 ,点击下个月的日期会自动跳转到下一个月。

建议支持选择日历区间,和支持服务端渲染

在nuxt项目中使用,压缩的index.js中会报document is not defined ,不知作者是否有支持服务端渲染,我是直接把源代码弄进去的,还有期望增加区间选择的功能,我现在是在外面又封装了一层来用的

能否自定义header以及每个日期单元格的内容

1、自定义header,如下图,在header的左侧和右侧是否可以用slot放置一些按钮,然后切换日期的左右箭头往中间收缩。
calendar -
2、在每个日期单元格四个角,以及上下,是否可以增加slot显示东西,比如红点或者图标。如下图:
calendar - 2

谢谢了!

感谢大佬!

image
感谢大佬,在其基础上再定制化开发,比自己重新写一个容易太多了

样式失效

按照文档引入后,样式无法渲染进来。等十来分钟后,样式才会被添加到元素上。
我把其作为组件放在组件的文件夹下就不会有这样的问题。是不是因为在node_modules文件夹下的东西不进行build导致的?

isToday无法触发?

按照官方写下的demo例子,isToday事件没有触发?观察在线demo好像也没有触发isToday?

月份固定行高

请问一下每个月的日期行数可以固定一个行数吗,日期行数有时候五行有时候六行。

markDate

markDate属性不好使 无法标记
image
image
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.