广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue实现签到日历效果
  • 102
分享到

vue实现签到日历效果

2024-04-02 19:04:59 102人浏览 独家记忆
摘要

本文实例为大家分享了Vue实现签到日历效果的具体代码,供大家参考,具体内容如下 先看看我们的效果图: 一、页面部分: <template>   <div clas

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

先看看我们的效果图:

一、页面部分:

<template>
  <div class="test-page">
    <div class="top">
      <div class="button" v-if="!sign" @click="Sign">
        <i class="calendar-icon"></i>
        <div>去签到</div>
      </div>
      <div class="button" v-if="sign">
        <i class="calendar-icon"></i>
        <div>已签到</div>
      </div>
      <div>已连续签到{{day}}天,继续加油!</div>
    </div>

    <div class="content">
      <!-- 年份 月份 -->
      <ul class="month bottom-line">
        <!--点击会触发pickpre函数,重新刷新当前日期 -->
        <li class="arrow" @click="pickPre(currentYear,currentMonth)"><van-icon name="arrow-left"/> 上个月</li>
        <li class="year-month">
          <span>{{ currentYear }}-{{ currentMonth }}</span>
        </li>
        <li class="arrow" @click="pickNext(currentYear,currentMonth)">下个月 <van-icon name="arrow"/></li>
      </ul>

      <!-- 星期 -->
      <ul class="weekdays">
        <li>日</li>
        <li>一</li>
        <li>二</li>
        <li>三</li>
        <li>四</li>
        <li>五</li>
        <li>六</li>
      </ul>

      <!-- 日期 -->
      <ul class="days bottom-line">
        <li  v-for="day in days">
          <!--本月已签到日期-->
          <span v-if="day.isSign && day.day.getMonth()+1 === currentMonth" class="cli">
            <img src="/static/images/calendar-sign-icon.png">
            {{ day.day.getDate() }}
          </span>
          <!--本月未签到日期-->
          <span v-if="!day.isSign && day.day.getMonth()+1 === currentMonth" class="cli">{{ day.day.getDate() }}</span>
        </li>
      </ul>
    </div>

    <div class="role">
      <div class="role-title">签到规则</div>
      <div class="role-content" v-html="role ? role : '暂无内容'"></div>
    </div>
  </div>
</template>

<script>
import index from './index';
export default index;
</script>

<style lang="less" scoped>
@import './index';
</style>

二、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: '<p>每天签到可获得5个能量</p>'
    };
  },
  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);
      }
    },
    
    isVerDate(v) {
      return this.arrDate.includes(v);
    },
    
    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));
    },
    
    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;
    },
    
    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;
    }
  }
}

签到效果:

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

--结束END--

本文标题: vue实现签到日历效果

本文链接: https://www.lsjlt.com/news/166234.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue实现签到日历效果
    本文实例为大家分享了vue实现签到日历效果的具体代码,供大家参考,具体内容如下 先看看我们的效果图: 一、页面部分: <template>   <div clas...
    99+
    2022-11-13
  • vue实现价格日历效果
    本文实例为大家分享了vue实现价格日历效果的具体代码,供大家参考,具体内容如下 1、效果图 2、下载全局安装:npm install ele-calendar 3、在compone...
    99+
    2022-11-12
  • js实现签到日历
    本文实例为大家分享了js实现签到日历的具体代码,供大家参考,具体内容如下 wxml代码 <view class="boxMain" style="height:{{dateL...
    99+
    2022-11-13
  • vue实现周日历切换效果
    本文实例为大家分享了vue实现周日历切换效果的具体代码,供大家参考,具体内容如下 废话不多说,直接上干货,需要的朋友自取 代码: <!DOCTYPE html> <...
    99+
    2022-11-13
  • 使用Vue实现简单日历效果
    使用Vue实现简单的日历,供大家参考,具体内容如下 原理分析: 1.获取当前时间2.显示当前时间3.点击增加和减少月份4.大月和小月的天数 效果演示 初始样式(显示现在的日期时间) ...
    99+
    2022-11-13
  • python实现日历效果
    本文实例为大家分享了python实现日历效果的具体代码,供大家参考,具体内容如下 一、代码编程过程 根据年月日算出星期几 def get_week_with_data(y,m,d): '''根据年月日计算...
    99+
    2022-06-02
    python 日历
  • C#实现日历效果
    本文实例为大家分享了C#实现日历效果的具体代码,供大家参考,具体内容如下 展示: 主要代码: public partial class calendar : Form     {...
    99+
    2022-11-13
  • vue怎么实现周日历切换效果
    本篇内容介绍了“vue怎么实现周日历切换效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果如下:代码:<!DOCTYPE ...
    99+
    2023-06-30
  • Bootstrap+Jquery实现日历效果
    本文实例为大家分享了Bootstrap+Jquery实现日历效果的具体代码,供大家参考,具体内容如下 一、效果图 二、代码 本案例中用到了Bootstrap和Jquery,除此之外...
    99+
    2022-11-12
  • php js怎么实现日历签到
    本篇内容主要讲解“php js怎么实现日历签到”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php js怎么实现日历签到”吧!php js实现日历签到的方法:首先创建好前台代码“$("...
    99+
    2023-06-20
  • Java实现动态日历效果
    本文实例为大家分享了Java实现动态日历效果的具体代码,供大家参考,具体内容如下 题目:动态日历 输入年份,月份,显示当前月份日历布局 分析 实现日历的基本思想为:确定一个基准日期,...
    99+
    2022-11-12
  • js实现简单日历效果
    本文实例为大家分享了js实现简单日历效果的具体代码,供大家参考,具体内容如下 ## css模块 <style type="text/css"> *{ ma...
    99+
    2022-11-12
  • 基于jquery实现日历效果
    本文实例为大家分享了jquery实现日历效果的具体代码,供大家参考,具体内容如下 function getBDays( y, m ) { return (new Da...
    99+
    2022-11-11
  • 小程序实现日历效果
    本文实例为大家分享了小程序实现日历效果的具体代码,供大家参考,具体内容如下 项目中需要做一个日历,最终效果如下: 日历实现是可以点击日期左右箭头和弹窗选择日期,下面上代码: htm...
    99+
    2022-11-13
  • C#如何实现日历效果
    这篇文章主要讲解了“C#如何实现日历效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#如何实现日历效果”吧!展示:主要代码:public partial class&...
    99+
    2023-07-02
  • 使用vue怎么实现一个价格日历效果
    今天就跟大家聊聊有关使用vue怎么实现一个价格日历效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Vue的优点Vue具体轻量级框架、简单易学、双向数据绑定、组件化、数据和结构的分离...
    99+
    2023-06-14
  • JavaScript自定义日历实现签到功能
    本文实例为大家分享了JavaScript自定义日历签到功能的具体代码,供大家参考,具体内容如下 先看下效果图 红色块为已签到的日期,样式可以随意更改,清晰明了,话不多说上代码: &...
    99+
    2022-11-13
  • JavaScript代码实现简单日历效果
    本文实例为大家分享了JavaScript实现简单日历效果的具体代码,供大家参考,具体内容如下 效果如下: 代码: <!DOCTYPE html> <html ...
    99+
    2022-11-12
  • js+html+css实现简单日历效果
    本文实例为大家分享了js+html+css实现简单日历效果的具体代码,供大家参考,具体内容如下 效果: 遇到的问题与解决方法: 1.“日”上移 方法:在&l...
    99+
    2022-11-13
  • HTML+CSS+JavaScript实现简单日历效果
    本文实例为大家分享了HTML+CSS+JavaScript实现简单日历效果的具体代码,供大家参考,具体内容如下 初学前端花了一下午写了一个简单的日历效果: 可以选择按月或者按年切换,...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作