前端|利用js实现在日历中的签到效果

简介: 前端|利用js实现在日历中的签到效果

效果介绍

日历在手机软件里是非常常见的一个功能,几乎每一个手机都有一个自带的手机日历软件。签到功能也是特别常用的,学习通、淘宝、包括学校使用的热水软件U易也都有运用。在一些签到获取积分(或者其他奖励)的软件中,签到和日历功能常常是捆绑使用。我们今天要实现的也是签到功能和日历捆绑在一起的效果。

本次的实现效果如下图1.1:

图1.1 实现效果

分析实现步骤

从图1.1的效果中可以看出。关于日历我们需要实现的效果有:①判断某一天是星期几;②判断某个月有几天;③判断某一年是平年还是闰年(即二月份是28天还是29天);

关于签到需要实现的更多的是样式的变化:①点击签到之后,签到按钮要发生变化,从签到变成已签到;②当签到成功后,页面利用模态框显示“签到成功字样”,如图2.1所示;③当签到成功后日历中对应的日期要发生相应的样式变化;

图2.1 签到成功效果图

实现过程

概述实现步骤:①创建相应的文件,并在HTML5中引入;②利用HTML5代码对页面框架进行搭建;③利用css对“签到”前后样式变化进行调整;④利用JavaScript对日历进行实现;

关于日历功能实现的具体步骤:

(1)利用HTML5代码对页面框架进行搭建:

       div>

   <div>

     <div>

       <div class="col-xs-2 addre"><a  onclick="javascript:history.back(-1)"><img src="images/jiantou@w.png"  alt="返回" /></a></div>

       <div class="col-xs-8 tittext"></div>

       <div class="col-xs-2 othmore"></div>

     </div>

   </div>

   <div>

     <div data-state="0"><img  src="images/weiqiandao@2x.png" alt=""></div>

     <p>总积分666名内可领取666积分</p>

   </div>

</div>

<div>

       <div><span></span>本月签到记录<span class="dian rt"></span></div>

       <div>

              <div><span>日</span><span>一</span><span>二</span><span>三</span><span>四</span><span>五</span><span>六</span></div>

(2)样式设置,根据效果对样式进行调整(代码省略)

(3)判断某一天是星期几,可以先判断某个月的天数,再判断某月的第一天是星期几,后面的天数依次罗列就可得出。

$(function(){

       var  nowdate = new Date();  //当前日期

       var  days = new Date(nowdate.getFullYear(), (nowdate.getMonth() + 1),  0).getDate();  //本月天数

       var  deforedays = new Date(nowdate.getFullYear(), (nowdate.getMonth()),  0).getDate();  //上月天数

       var  month = nowdate.getMonth() + 1,

              date  = nowdate.getDate(),

              week  = nowdate.getDay();

       var  firstday = new Date();    //本月第一天的日期

      firstday.setDate(1);

       var  firstdayweek = firstday.getDay();  //本月第一天星期几

       console.log('今天是' + month + '月' + date + '日,星期' + week);

       console.log(firstdayweek)

       //判断星期

       $('.rl-main  .week span').each(function(index,item){

              if(index  == week){

                     $('.rl-main  .week span').removeClass('active');

                     $(this).addClass('active');

              }

       });

(4)在利用上述代码判断清楚日期之后,就可以生成相应的日历表格。代码如下:

var dayinfo = '',

              num  = 0,

              numaft  = 0;

       for(var  i = 1; i <= 6; i ++){

              dayinfo  += '<div>'

              for(var  j = 1; j <= 7; j++){

                     if(i  == 1 && j == 1){

                            for(var  beforeday = firstdayweek-1; beforeday >=0; beforeday --){

                                   dayinfo  += '<span>';

                                   dayinfo  += Number(deforedays - beforeday);

                                   dayinfo  += '</span>'

                            }

                     }else  if(i == 1 && j > firstdayweek){

                            if(num  == date-1){

                                   dayinfo  += '<span id="nowday">' + (++ num) +  '</span>'

                            }else  {

                                   dayinfo  += '<span>' + (++ num) + '</span>'       }                          

                     }else  if(i > 1 ) {

                            if(num  == days){

                                   dayinfo  += '<span>' + (++ numaft) + '</span>'

                            }else  {

                                   if(num  == date-1){

                                          dayinfo  += '<span id="nowday">' + (++ num) +  '</span>'

                                   }else  {

                                          dayinfo  += '<span>' + (++ num) + '</span>'

                                   }                           }                    }             }

              dayinfo  += '</div>'     }

       $('.rl-main  .week').after(dayinfo)

       console.log(dayinfo);

(5)最后就是实现签到之后在对应的日期显示相应的效果,包括对应的样式和模态框。代码如下:

//签到功能

       $('.sign-bg  .sign-btn .sig-bt').click(function(){

              var  state = $(this).attr('data-state');

              if(state  == 0){

                     $(this).attr('data-state','1');

                     $(this).addClass('rotate');

                     $(this).children('img').attr('src','images/yiqiandao@2x.png');

                     setTimeout(function(){

                            $('#nowday').addClass('yqd');

                            alert("恭喜您,签到成功");

                     },500);          

              }else  {

                     alert('亲,您已经签过到了!')

              }

       });

});   


目录
相关文章
|
28天前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
25天前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
27天前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
40 5
|
25天前
|
缓存 前端开发 JavaScript
JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式
本文深入解析了JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式(Hash路由和History路由)、优点及挑战,并通过实际案例分析,帮助开发者更好地理解和应用这一关键技术,提升用户体验。
63 1
|
29天前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
35 4
|
1月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
111 1
|
1月前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
40 0
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
|
1月前
|
JavaScript 前端开发 开发者
前端框架对比:Vue.js与Angular的优劣分析与选择建议
【10月更文挑战第27天】在前端开发领域,Vue.js和Angular是两个备受瞩目的框架。本文对比了两者的优劣,Vue.js以轻量级和易上手著称,适合快速开发小型到中型项目;Angular则由Google支持,功能全面,适合大型企业级应用。选择时需考虑项目需求、团队熟悉度和长期维护等因素。
47 1
|
2月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
178 2
|
2月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
48 0
下一篇
DataWorks