vue.js实现日历插件使用方法详解

今天要实现的功能就是以下这个功能:vue.js模拟日历插件

好了废话不多说了 直接上代码了

css:

*{
     margin: 0;
     padding: 0;
     -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
     box-sizing: border-box;
        }
        #app{
            width: 1000px;
            margin: 10px auto;
        }
        .calender{
            width: 1000px;
        }
        .calender table{
            width: 1000px;
        }
        .calender table,th,tr,td{
            border:1px solid #333333;
            border-collapse: collapse;
        }
        .calender td{
            height: 100px;
            vertical-align: top;
            text-align: left;
            padding: 5px 0 0 5px;
            font-size: 13px;
        }
        .calender td.cur{
            color:red;
        }

html:

<div id="app">
    <div class="calender">
        <table>
            <caption>
                <select v-model.number="year">
                    <option v-for="i of 490">{{i+1969}}</option>
                </select>
                <select v-model.number="month">
                    <option v-for="i of 12">{{i}}</option>
                </select>
            </caption>
            <thead>
            <tr>
                <th>周日</th>
                <th>周一</th>
                <th>周二</th>
                <th>周三</th>
                <th>周四</th>
                <th>周五</th>
                <th>周六</th>
            </tr>
            </thead>
            <tbody>
            <!--index 从0开始 i从1开始-->
            <tr v-for="(a,index) of calender.length / 7" >
                <td v-for="i of 7" :class="{cur:calender[index * 7 + (i - 1)].cur }">{{calender[index * 7 + (i - 1)].fullDay}}</td>
            </tr>
            </tbody>
        </table>
    </div>
</div>

js:

var vm = new Vue({
        el:'#app',
        data:{
            year:2018,
            month:1
        },
        computed:{
            calender(){
                var arr = [];

                //new data 有三个参数: 1,年 2.月 3.默认是1 如果是0,表示上个月最后一天 - 前两天 3 后天
                var nowMonthLength = new Date(this.year,this.month,0).getDate();
                var nowMonthFirstWeek = new Date(this.year,this.month-1).getDay();
                var lastMonthLength = new Date(this.year,this.month-1,0).getDate();
                console.log('本月有:'+nowMonthLength);
                console.log('本月第一天'+nowMonthFirstWeek);
                console.log('上个月长度'+lastMonthLength);

                // this.month = parseInt(this.month);
                //每个月的上一个月是哪一年的那一个月
                var pmonth = this.month == 1 ? 12 : this.month - 1;
                //上一年
                var pyear = this.month == 1 ? this.year - 1 :this.year;
                //下一月
                var nmonth = this.month == 12 ? 1 : this.month + 1;
                //下一月
                var nyear = this.month == 12 ? this.year + 1 : this.year;
                //补零函数
                // function toTwo(n) {
                //     return n < 10 ? '0' + n : n;
                // }
                function buling(n) {
                    return n.toString().length > 1 ? n.toString() : '0' + n.toString();
                }
                // 补充上个月的最后几天
                while(nowMonthFirstWeek--){
                    arr.unshift({
                        day:lastMonthLength,
                        cur:true,
                        fullDay:`${pyear}-${buling(pmonth)}-${buling(lastMonthLength)}`
                    });
                    lastMonthLength--
                }
                console.log(arr);

                //本月天数
                var _a = 1;
                while(nowMonthLength--){
                    arr.push({
                        day:_a,
                        cur:false,
                        fullDay:`${this.year}-${buling(this.month)}-${buling(_a)}`
                    });
                    _a++
                }

                //下个月补全
                var nextLength = arr.length > 35 ? 42 - arr.length : 35 - arr.length;
                _a = 1;
                while (nextLength--){
                    arr.push({
                        day:_a,
                        cur:true,
                        fullDay:`${nyear}-${buling(nmonth)}-${buling(_a)}`
                    });
                    _a++
                }
                return arr;
            }
        }
    })

注意:需要先引入你本地的vue.js文件, 才能正常运行哦!!!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Vue插件写、用详解(附demo)

    Vue插件 1.概述 简单来说,插件就是指对Vue的功能的增强或补充. 比如说,让你在每个单页面的组件里,都可以调用某个方法,或者共享使用某个变量,或者在某个方法之前执行一段代码等 2.使用方法 总体流程应该是: [声明插件]--[写插件]--[注册插件]--[使用插件] 写插件和声明插件是同步的,然后注册到Vue对象中(不用担心重复注册),最后在写Vue组件的时候使用写的插件 声明插件 先写一个js文件,这个js文件就是插件文件,里面的基本内容如下: /* 说明: * 插件文件:service

  • vue 插件的方法代码详解

    在开发项目的时候,我们一般都用 vue-cli 来避免繁琐的 webpack 配置和 template 配置.但是官方 cli3 现在并不支持搭建 plugin 开发的项目. 还好,已经有大神(Kazupon)走在了我们前面,我们就用现成的vue-cli-plugin-p11n. 如果你没有安装 vue-cli,请先安装 npm i -g @vue/cli 首先,搭建项目 vue create [your plugin name] && cd [your plugin name] vue

  • Vue之插件详解

    总结 本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

  • Vue中qs插件的使用详解

    之前用Vue+element写了一个后台管理系统,在登录时使用axios请求数据传参时无法正常的获取数据.之后也是一通百度,发现原因是传递参数要将参数序列化. 这里使用了qs插件: 简单来说,qs 是一个增加了一些安全性的查询字符串解析和序列化字符串的库. 在项目中使用命令行工具输入:npm install qs 安装完成后在需要用到的组件中:import qs from'qs' 具体使用中我查看了:qs.parse()和qs.stringify() 这两种方法虽然都是序列化,但是还是有区别的.

  • Vue.js 插件开发详解

    前言 随着 Vue.js 越来越火,Vue.js 的相关插件也在不断的被贡献出来,数不胜数.比如官方推荐的 vue-router.vuex 等,都是非常优秀的插件.但是我们更多的人还只停留在使用的阶段,比较少自己开发.所以接下来会通过一个简单的 vue-toast 插件,来了解掌握插件的开发和使用. 认识插件 想要开发插件,先要认识一个插件是什么样子的. Vue.js 的插件应当有一个公开方法 install .这个方法的第一个参数是 Vue 构造器 , 第二个参数是一个可选的选项对象: MyP

  • 基于Vue渲染与插件的加载顺序的问题详解

    Vue实践分享(三)在实际项目的开发过程中,经常会遇到页面还没渲染完成而插件就已经开始加载的问题,这样就会导致显示和功能出错. 可以通过Vue中的nextTick来解决 Vue.nextTick(function() { //widget }); 这样就会在页面渲染完成后再执行nextTick内的插件 以上这篇基于Vue渲染与插件的加载顺序的问题详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们. 您可能感兴趣的文章: 浅谈Vue的加载顺序探讨 Vue.js学习教程

  • vue.js实现日历插件使用方法详解

    今天要实现的功能就是以下这个功能:vue.js模拟日历插件 好了废话不多说了 直接上代码了 css: *{ margin: 0; padding: 0; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } #app{ width: 1000px; margin: 10px auto; } .calender{ width: 1000px; } .calender table{

  • laydate时间日历插件使用方法详解

    本文为大家分享了laydate时间日历插件的使用方法,供大家参考,具体内容如下 1.前言 在处理页面表单的时候,会遇到日期类型的数据,我们可以通过时间插件的让用户来选择具体的时间,这样就会比较方便.今天记录一下laydate这个时间插件. 2.代码展示 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>测试时间插件&l

  • Vue.js路由组件vue-router使用方法详解

    使用Vue.js + vue-router 创建单页应用是非常简单的.只需要配置组件和路由映射,然后告诉 vue-router 在哪里渲染即可. 一.普通方式基本例子: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>vue-router使用方法</title> </head> <bod

  • vue.js国际化 vue-i18n插件的使用详解

    安装方法 1.使用CDN直接引用 <script src="https://unpkg.com/vue/dist/vue.js"></script> <script src="https://unpkg.com/vue-i18n/dist/vue-i18n.js"></script> 2.NPM $ npm install vue-i18n 3.Yarn $ yarn add vue-i18n 使用方法 在这里只介绍v

  • Vue.js标签页组件使用方法详解

    本文实例为大家分享了Vue.js标签页组件使用的具体代码,供大家参考,具体内容如下 效果 入口页 index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0&q

  • Vue.js数字输入框组件使用方法详解

    本文实例为大家分享了Vue.js数字输入框组件的具体实现代码,供大家参考,具体内容如下 效果 入口页 index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0

  • vue.js简单配置axios的方法详解

    前言 官方现在已经不再推荐用resource了,换了个axios,咱也不能落后,至少你得知道咋弄,面试的时候也好给面试官吹吹牛逼,废话不多说. 它本身具有以下特征: 从浏览器中创建 XMLHttpRequest 从 node.js 发出 http 请求 支持 Promise API 拦截请求和响应 转换请求和响应数据 取消请求 自动转换JSON数据 客户端支持防止 CSRF/XSRF 配置方法 首先用npm安装 npm install --save axios vue-axios 安装完之后,在

  • jquery.tableSort.js表格排序插件使用方法详解

    本文实例为大家分享了jquery.tableSort.js表格排序的具体代码,供大家参考,具体内容如下 1.一定要引jQuery包,所有jq插件都是基于jQuery包的 2.如果想指定哪一栏不排序这样写 $("#mytable").tablesorter({headers:{5:{sorter:false}}}); 第5列的sorter为false就OK了 参考:http://www.jb51.net/article/105217.htm <!DOCTYPE html> &

  • TableSort.js表格排序插件使用方法详解

    本文实例为大家分享了TableSort.js表格排序的具体代码,供大家参考,具体内容如下 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>TableSort</title> <style type="text/css"> table { bor

  • CountUp.js数字滚动插件使用方法详解

    CountUp.js 是一个轻量级,无依赖的JavaScript类,通过简单的设置就可以达到数字滚动的效果 演示地址: countUp.js 可配置项: target = 目标元素的 ID: startVal = 开始值: endVal = 结束值: decimals = 小数位数,默认值是0: duration = 动画延迟秒数,默认值是2: //用法: var options = { useEasing: true, useGrouping: true, separator: ',', de

随机推荐