热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vue实现签到日历效果【vue框架】

这篇文章主要为大家详细介绍了vue实现签到日历效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的

本文实例为大家分享了vue实现签到日历效果的具体代码,供大家参考,具体内容如下

先看看我们的效果图:

一、页面部分:





二、js部分:

import { Cell, CellGroup, Field, Popup, Button, Icon } from "vant";

export default {
  components: {
    [Cell.name]: Cell,
    [CellGroup.name]: CellGroup,
    [Field.name]: Field,
    [Popup.name]: Popup,
    [Button.name]: Button,
    [Icon.name]: Icon
  },
  data() {
    return {
      currentDay: 1, // 当前天
      currentMonth: 1, // 当前月
      currentYear: 1970,
      currentWeek: 1, // 一号所在的星期
      days: [], // 当月所有天数
      content: {},
      arrDate: [], // 当月签到日期
      num: 0,
      day: 10,
      sign: false,
      role: "

每天签到可获得5个能量

"     };   },   created() {     this.getSign();   },   methods: {     /**      * 获取签到日期      */     getSign() {       // 接口未完成,模拟数据       const sign_days = [         { day: 5 }, { day: 1 }, { day: 2 }, { day: 3 }, { day: 4 }, { day: 6 }, { day: 7 }, { day: 8 }, { day: 9 }, { day: 10 }       ];       for (const i in sign_days) {         this.arrDate.push(sign_days[i].day);       }       this.initData(null);     },     initData(cur) {       let date;       if (cur) { // 切换日期         date = new Date(cur);       } else {         var now = new Date();         var d = new Date(this.formatDate(now.getFullYear(), now.getMonth() + 1, 1));         d.setDate(35);// 设置天数为35天         date = new Date(this.formatDate(d.getFullYear(), d.getMonth(), 1));       }       this.currentDay = date.getDate(); // 今日日期 几号       this.currentYear = date.getFullYear(); // 当前年份       this.currentMOnth= date.getMonth() + 1; // 当前月份       this.currentWeek = date.getDay(); // 0,1...6 星期       const str = this.formatDate(this.currentYear, this.currentMonth, this.currentDay); // 2020-01-01       this.days.length = 0; // 初始化日期       // 如果今天是周日,放在第一行第7个位置,前面6个 这里默认显示一周,如果需要显示一个月,则第二个循环为 i<= 35- this.currentWeek       for (var i = this.currentWeek; i > 0; i--) {         const d = new Date(str);         d.setDate(d.getDate() - i);         var dayobject = {}; // 用一个对象包装Date对象  以便为以后预定功能添加属性         dayobject.day = d;         this.days.push(dayobject); // 将日期放入data 中的days数组 供页面渲染使用       }       // 其他周 // 设置天数为35天,周日设置在第一位,循环从36开始       this.num = 0;       for (var j = 0; j <= 36 - this.currentWeek; j++) {         const d = new Date(str);         d.setDate(d.getDate() + j);         const dddd = d.getDate();         if (dddd === 1) {           this.num++;         }         if (this.num === 2) {           return;         }         const dayobject = { day: d, isSign: this.isVerDate(dddd) };         this.days.push(dayobject);       }     },     /**      * 判断该日期是否有签到      * @param v      * @returns {boolean}      */     isVerDate(v) {       return this.arrDate.includes(v);     },     /**      * 上一月      * @param year      * @param month      */     pickPre(year, month) {       const d = new Date(this.formatDate(year, month, 1));       d.setDate(0);       this.initData(this.formatDate(d.getFullYear(), d.getMonth() + 1, 1));     },     /**      * 下一月      * @param year      * @param month      */     pickNext(year, month) {       const d = new Date(this.formatDate(year, month, 1));       d.setDate(35);       this.initData(this.formatDate(d.getFullYear(), d.getMonth() + 1, 1));     },     // 返回 类似 2020-01-01 格式的字符串     formatDate(year, month, day) {       month <10 && (mOnth= "0" + month);       day <10 && (day = "0" + day);       const data = year + "-" + month + "-" + day;       return data;     },     /**      * 点击签到      * @param index      */     Sign() {       const now = new Date();       this.arrDate.push(now.getDate());       this.initData();       this.sign = true;       // 接口待完成,虚拟提示       this.$fn.success("签到成功");     }   } };

三、CSS部分:

.test-page {
  .top {
    background: url("/static/images/user-bg-img.jpg") no-repeat 0 0;
    background-size: 100% 100%;
    overflow: hidden;
    color: #ffffff;
    padding: 15px;
    height: 120px;
    text-align: center;
    .button {
      display: flex;
      justify-content: center;
      border: 1px solid #ffffff;
      border-radius: 20px;
      color: #ffffff;
      font-size: 18px;
      width: 120px;
      margin: 0 auto 10px;
      height: 40px;
      line-height: 40px;
      .calendar-icon {
        display: block;
        width: 40px;
        height: 40px;
        background: url(/static/images/calendar-icon.png) no-repeat -6px -4px;
        background-size: 114px 45px;
      }
    }
    .button:active {
      background-color: #5283c4;
      opacity: 0.8;
    }
  }

  .content {
    margin: 0 15px;
    border-radius: 8px;
    overflow: hidden;
    margin-top: -40px;
    box-shadow: rgba(225,225,225,0.7) 0  10px 20px 0;
  }
  .month {
    background: #ffffff;
    margin: 0;
    padding: 10px 15px;
    display: flex;
    justify-content: space-between;
    li {
      text-transform: uppercase;
      letter-spacing: 0;
    }
    .arrow {
      color: #5283c4;
      font-size: 12px;
      i {
        font-size: 13px;
        top: 2px;
      }
    }
    .year-month { font-size: 17px; }
  }

  .weekdays { /*头部星期*/
    margin: 0;
    padding: 10px 0;
    background-color: #ffffff;
    display: flex;
    flex-wrap: wrap;
    justify-content: space-around;
    li {
      display: inline-block;
      text-align: center;
    }
  }

  .days { /*日期*/
    padding: 0 0 10px;
    background: #FFFFFF;
    margin: 0;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-start;

    li {
      list-style-type: none;
      width: 14.2%;
      padding: 1%;
      box-sizing: border-box;
      height: 40px;
      margin-bottom: 4px;
      text-align: center;
      color: #000;
      .cli {
        position: relative;
        width: 100%;
        height: 40px;
        display: flex;
        align-items: center;
        justify-content: center;
        img {/*签到的日期*/
          height: 40px;
          position: absolute;
        }
      }
    }
  }

  .role {
    padding: 20px 15px;
    .role-title {
      margin-bottom: 5px;
      font-weight: bold;
    }
    .role-content {
      font-size: 13px;
      color: #333333;
    }
  }
}

签到效果:

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


推荐阅读
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • packagecom.panchan.tsmese.utils;importjava.lang.reflect.ParameterizedType;importjava.lang. ... [详细]
  • Java 中的等时日期(int,int)方法,示例 ... [详细]
  • Leetcode学习成长记:天池leetcode基础训练营Task01数组
    前言这是本人第一次参加由Datawhale举办的组队学习活动,这个活动每月一次,之前也一直关注,但未亲身参与过,这次看到活动 ... [详细]
  • iOS 不定参数 详解 ... [详细]
  • 使用 Git Rebase -i 合并多个提交
    在开发过程中,频繁的小改动往往会生成多个提交记录。为了保持代码仓库的整洁,我们可以使用 git rebase -i 命令将多个提交合并成一个。 ... [详细]
  • 本文介绍了如何在Python中使用插值方法将不同分辨率的数据统一到相同的分辨率。 ... [详细]
  • Manacher算法详解:寻找最长回文子串
    本文将详细介绍Manacher算法,该算法用于高效地找到字符串中的最长回文子串。通过在字符间插入特殊符号,Manacher算法能够同时处理奇数和偶数长度的回文子串问题。 ... [详细]
  • Python多线程详解与示例
    本文介绍了Python中的多线程编程,包括僵尸进程和孤儿进程的概念,并提供了具体的代码示例。同时,详细解释了0号进程和1号进程在系统中的作用。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • Flutter 2.* 路由管理详解
    本文详细介绍了 Flutter 2.* 中的路由管理机制,包括路由的基本概念、MaterialPageRoute 的使用、Navigator 的操作方法、路由传值、命名路由及其注册、路由钩子等。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
author-avatar
ik人生如梦场
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有