日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

Vue 实现的一个日历

發布時間:2023/12/20 vue 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vue 实现的一个日历 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于項目需要,實現一個日歷組件,直接上代碼,實現邏輯代碼里有注釋:

<template><div class="calendar"><div class="now-mouth">{{displayDate}}</div><div class="calendar-title"><div class="calendar-select"><div class="calendar-select-row" v-for="(week,index) in weekName " :key="index"><input class="checkbox" :ref="'week_'+index" type="checkbox" :name="week" @change="checked('week',index)" /></div><div class="calendar-select-row"></div></div><div class="calendar-select"><div class="calendar-select-row" v-for="(week, index) in weekName" :key="index"><div class="week" > {{week}}</div></div><div class="calendar-select-row"><input class="checkbox" ref="checkAll" type="checkbox" @change="checkAll" /></div></div></div><div class="calendar-body"><div v-for="(week, weeKIndex) in calendarDay" :key="weeKIndex" ><div class="calendar-select"><divclass="calendar-select-row"v-for="(day, dayIndex) in week" :key="dayIndex":class="{isSelected: day.select}"@click="onClick(day)"><div class="day" v-show="day.day">{{day.day}}</div></div><div class="calendar-select-row"><input class="checkbox" type="checkbox":ref="'row_'+weeKIndex"v-show="week[0].day || week[6].day"@change="checked('row',weeKIndex)"/></div></div></div></div></div> </template><script> /** * Canlendar Module * ---------------------- * Author:zoboy * Date: 2019.06.12 */ import moment from 'moment' export default {name: 'Canlendar',components: {},data () {return {displayDate: '',nowDay: '',calendarDay: [],checkedDay: [],weekName: ['日', '一', '二', '三', '四', '五', '六']}},props: {mouth: String},mounted () {this.createCalendar(this.mouth)},created () {},methods: {onClick (day) {if (day && day.day) this.$emit('onClick', day)},checked (target, index) {let checkRef = target + '_' + indexlet check = this.$refs[checkRef][0].checkedthis.calendarDay.forEach(week => {week.forEach(day => {if (day && day.day && day[target] === index) day.select = check})})},checkWork (isOnWork, select) {this.calendarDay.forEach(week => {week.forEach(day => {if (day && day.day) {if (isOnWork && (day.week > 0 && day.week < 6)) {day.select = select} else if (!isOnWork && (day.week === 0 || day.week === 6)) {day.select = select}}})})},checkAll () {let check = this.$refs.checkAll.checkedthis.calendarDay.forEach(week => {week.forEach(day => {if (day && day.day) day.select = check})})},createCalendar (mouth) {if (mouth) this.nowDay = moment(mouth).format('YYYY-MM')else this.nowDay = moment().format('YYYY-MM')this.displayDate = moment(this.nowDay).format('YYYY年MM月')this.calendarDay = this.getCurrMonthDays(this.nowDay)},getCurrMonthDays (theDay) {// 獲取當前月的第一天let start = moment(theDay).add('month', 0).format('YYYY-MM') + '-01'// 獲取上一個月的總天數let lastMonthDays = moment(this.date).subtract(1, 'month').daysInMonth()// 構造日歷的42個格子let daysArr = [[], [], [], [], [], []]// 獲取當前月的第一天是星期幾let currentWeekday = moment(start).format('E')// 獲取當前月的總天數let nowMouthDays = moment(theDay).daysInMonth()for (let i = 0; i < 7; i++) { // 每一周// 虛擬天數,確定第一行第一列的值(上個月的總天數-當前月第一天的星期幾(1)=26就是第一個格子的值,后面的一次類推)let virtualDay = (lastMonthDays - currentWeekday) + i + 1for (let j = 0; j < daysArr.length; j++) { // 每一天daysArr[j][i] = this.getDay(i, j, start, virtualDay + (j * 7), lastMonthDays, nowMouthDays) // 每一行*7}}return daysArr},getDay (week, row, start, day, lastMonthDays, nowMouthDays, index) {let dayObj = {}if (day <= lastMonthDays) { // 上一月 (*<32)// return daydayObj = {'day': ''}} else if (day <= (lastMonthDays + nowMouthDays)) { // 本月(*<=(31+30))let dayNum = day - lastMonthDayslet date = moment(start).add(dayNum - 1, 'days').format('YYYY-MM-DD')dayObj = {day: dayNum,date: date,week: week,row: row,isToday: new Date(date).getTime() === new Date(moment().format('YYYY-MM-DD')).getTime(),select: false}} else { // 下一月 (*>(31+30))// return day - (lastMonthDays + nowMouthDays)dayObj = {'day': ''}}return dayObj}},computed: {},watch: {mouth (newMouth) {this.createCalendar(newMouth)},calendarDay: {handler (canlendar) {this.checkedDay = []canlendar.forEach(week => {week.forEach(day => {if (day && day.day) {if (day.select) this.checkedDay.push(day)// else {// console.log(day.week, day.row)// let weekRef = 'week_' + day.week// let rowRef = 'row_' + day.row// this.$refs[weekRef][0].checked = false// this.$refs[rowRef][0].checked = false// this.$refs.checkAll.checked = false// }}})})console.log(this.checkedDay)},deep: true}} } </script> <style lang="scss" scoped> $base-light-color: #f2f2f2; .calendar{margin: 15px;width: 248px;height: 224px;display: flex;flex-direction: column;border-top: 1px solid darken($base-light-color, 5%);border-left: 1px solid darken($base-light-color, 5%);.now-mouth{border-bottom: 1px solid darken($base-light-color, 5%);border-right: 1px solid darken($base-light-color, 5%);}.calendar-title{.calendar-week{min-width: 35px;}}.calendar-select{display: flex;flex-direction: row;.calendar-select-row{min-width: 30px;min-height: 25px;border-right: 1px solid darken($base-light-color, 5%);border-bottom: 1px solid darken($base-light-color, 5%);// &:last-child {// border-right: none;// }.checkbox{margin-top: 6px;margin-left: 7px;}.week{margin-top: 6px;margin-left: 7px;}}}.calendar-body{.day {margin-top: 4px;margin-left: 9px;cursor:pointer;}.isSelected {background-color: #1260ad;}} } </style>

效果圖:

總結

以上是生活随笔為你收集整理的Vue 实现的一个日历的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 97精品人妻麻豆一区二区 | 久久在线免费观看视频 | 国产无遮挡免费观看视频网站 | 色天天干| 久久久久久久久久久久久久久久久久久 | 天天色天天干天天色 | 欧美日韩免费一区 | 麻豆短视频在线观看 | 亚洲二区在线观看 | 亚洲妇熟xx妇色黄蜜桃 | 色多多av | 国产91成人 | 国产成人一区在线观看 | 国产色网址 | 久久视奸 | 99热播精品 | 亚洲av无码久久精品狠狠爱浪潮 | 日韩jizz| 久久精品久久精品 | 全部免费毛片在线播放高潮 | 久久久久久综合网 | 久久不卡 | 色哟哟国产精品色哟哟 | 久久久九九九热 | 一区二区在线国产 | 国产一区视频在线免费观看 | 福利毛片 | 国产特级视频 | 国产一区在线免费观看 | 激情视频在线免费观看 | 成人小视频免费观看 | 久久99精品久久久久 | 北条麻妃一区二区三区在线观看 | 亚洲成人乱码 | 狠色综合 | 国产精品无码人妻一区二区在线 | 毛片毛片毛片毛片毛片毛片毛片毛片 | 中文字幕亚洲欧美日韩 | 中文字幕视频免费观看 | 黄色资源在线 | 污视频网站免费在线观看 | 亚洲女人av| 成人av一级 | 成人一区二区三区仙踪林 | 久久国产a | 日本三级视频网站 | 国产精品久久久久久久久久免费 | 成人免费高清视频 | 国产片在线 | 中国女人真人一级毛片 | 韩国无码av片在线观看网站 | 国产美女激情 | 一区自拍| 国内自拍一区 | 伊人3 | 欧美性日韩 | 日本三级理论片 | 欧洲午夜精品 | 91在线视频播放 | 在线播放无码后入内射少妇 | 少妇被躁爽到高潮无码人狍大战 | 国产性色视频 | 日韩 欧美 亚洲 国产 | 97日日夜夜 | 欧美日韩三级在线观看 | 天天插综合网 | 岳奶大又白下面又肥又黑水多 | 国产又粗又猛又黄又爽的视频 | 欧美成人午夜免费视在线看片 | 97免费在线视频 | 噜噜色图 | 91porn破解版| 男欢女爱久石 | 日日夜夜爽爽 | 蜜桃臀av一区二区三区 | 精品九九久久 | 久久久久亚洲av成人网人人网站 | 精品人妻一区二区三区潮喷在线 | 黄页网站免费观看 | 污污视频网站在线免费观看 | 欧美精品一区二区性色a+v | 粉嫩av | 亚洲精品综合在线 | 91视频观看 | 精品一区李梓熙捆绑 | 成人无码视频 | 就要爱爱tv | 亚洲人吸女人奶水 | 亚洲精品乱码久久久久久9色 | 国产精品815.cc红桃 | 综合在线视频 | 久久久久成人精品免费播放动漫 | 在线高清观看免费观看 | 四季av中文字幕 | 国产视频h | jizz中国少妇 | 日本h漫在线观看 | 黄色片免费观看视频 | 一级国产片 |