实现的主要功能:

  1. 点击实现日历样式的改变
  2. 实现下一次点击时,上一次点击改变的样式恢复原状(核心)
  3. 实现点击日历时,在最下方输出信息指定信息(注意:并不是点击元素中的信息)

第一步的核心思想:

由于此处增加点击事件不是通过 id名 直接添加,而是通过类数组(通过DOM中的TagName得到),给需要相同功能的标签,利用循环进行点击事件添加。
即如果是通过id名添加点击事件:

  id.onclick = function(){id.style = "color:black"  //通过id这个钩子,可以直接取到通过点击事件要所想要修改的DOM}

这就造成了一个现象,即当鼠标点击后,无法直接通过id名(下面称为钩子),即钩子获取鼠标点击
了哪个日历块, 因为随着循环进行,其索引值不断改变,当循环结束,(点击时已经在循环结束后了)如何索引该日历块成了主要问题。
这里利用了 this 指向,(第一次感受到了this的威力),即其事先不用通过 钩子 得到要修改的元素,
而是,通过绑定的点击事件, 与可指向其调用对象的 this 获取到被点击日历块的 钩子。

第二步的核心思想:

这种思维方式,充分利用了JS脚本语言的特性,发挥了其在,修改DOM中的强大威力。

即通过给日历块加入 类名 (setAttribute(“class”,“active”)),使其与在css中已定义好的样式进行对应,也可实现DOM的改变!

并且,可以通过 清除 该DOM class名 , setAttribute(“class”,""),实现样式的回归! 简直不要太给力!
但是,在运用时需要注意,其在css中的优先级,使用@important 可实现优先级最高!

核心代码

 body .active{background: #fff;color: red; }

在在css中建立好点击后的样式,通过类名与点击事件相交互

<script type="text/javascript">var liArr = document.getElementsByTagName("li");var text = document.getElementById("text_1");var data = ["11","22","33","44","55","66","77","88","99","1010","1111","1212"];for(var i = 0;i< liArr.length ;i++){liArr[i].onmousemove = function(){this.style.border = "1px solid #ccc"//var child = this.children;//console.log(child);}liArr[i].onmouseout = function(){this.style.border = "none"//this.style.background = "rgba(51,51,51)"}liArr[i].index = i; // 保存索引值,可以任意调用别的数组来达到对应插入数据效果liArr[i].onclick = function(){// text.innerHTML  = this.innerHTML;//this.className = "active";this.setAttribute("class","active");//先清除所有的类名for(var j = 0; j < liArr.length; j++){liArr[j].className = "";}this.className = "active";//console.log(i);text.innerHTML = data[this.index];                 }//通过js添加修改类名,来对应已经定义好的样式!//此种方法可以通过,每次点击进行类名清空来使其恢复原样!//以此达到点此去彼的情况//思考:可不可以通过this 与 that 以及闭包特性解决呢?}</script>

js核心代码

HTML + JS实现万年历效果相关推荐

  1. 原生JS实现分页效果1.0

    不太完整,写的太急,等等加上完整注释,写起来还是有些难度的,写的有点水,后面再改进改进. <!DOCTYPE html> <html lang="en"> ...

  2. php拖拽原理,JS拖拽效果及原理解析

    这篇文章主要介绍了如何实现js拖拽效果及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 元素拖拽分成3个步骤:按下鼠标,移动鼠标,松开鼠标. ...

  3. php vue联动查询,使用vue.js实现联动效果的示例代码

    摘要:本篇文章主要介绍了使用vue.js实现联动效果的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧想用vue.js写一个联动效果,按照自己的思路实验了下,并没有 ...

  4. 《javaScript100例|04》自动播放——Js幻灯片缓冲效果

    目录 效果图 示例 源码地址: 效果图 示例 <html> <head> <title>自动播放--幻灯片缓冲效果</title> <style& ...

  5. JS特效代码大全(十一)超炫的js图片展示效果(三)

    在看过上一篇JS特效代码大全(十)超炫的js图片展示效果(二)文章后,相信很多人都想试试把这种效果用到自己的项目中去了.在用的过程当中个性化的需求就来了,比如,想把小图导航放上边去,或者放左边放右边等 ...

  6. js 实现筋斗云效果(点击tab栏里面的某个地方,会有图片移动到此地方)

    js 实现筋斗云效果 animate.js <!DOCTYPE html> <html lang="en"> <head><meta ch ...

  7. pixi.js 制作 流星雨效果

    pixi.js 制作 流星雨效果 //创建流星们creatShootingStart(){let startNum = 25;//个数this.startSp = [];//星星们的集合//流星消失的 ...

  8. 原生js实现放大镜效果

    记录一次原生js实现放大镜效果. 文章目录 效果图 设计思路 基本架子 蒙版 放大效果图 逻辑设计 蒙版跟放大的图肯定要先隐藏 鼠标移入图片显示蒙版 鼠标移动蒙版跟着移动 处理边界情况 大图移动 小优 ...

  9. html萤火虫特效代码,原生JS实现萤火虫效果

    本文实例为大家分享了JS实现萤火虫效果的具体代码,供大家参考,具体内容如下 上代码之前,先看一下效果: CSS部分(此处用元素模拟萤火虫,背景可自行设置): .box{width: 4px;heigh ...

最新文章

  1. OFRecord 数据格式
  2. 如何理解react中的super(),super(props)
  3. ASP.NET温故而知新学习系列之ASP.NET多线程编程—异步编程(九)
  4. uic计算机课程表,美国UIC大学研究生毕业率能达到多少?申请条件、专业课程汇总...
  5. html:(11):address和code标签
  6. python实验练习-图书管理系统(使用文件来实现)
  7. EF连接ORACLE
  8. pytorch torch.reshape
  9. crc32校验算法_UDP/IP硬件协议栈设计(三):校验
  10. linux系统快捷键使用
  11. 【BZOJ-1324】Exca王者之剑 最小割
  12. C#中生成随机数的方法和语句
  13. 单元测试用例编写总结 (白盒测试)
  14. 响应式网站建设的优缺点
  15. 苹果付费app共享公众号_8.10号,IOS苹果App Store 5款付费App限时免费,支持iPhone/iPad...
  16. PAT乙级做题部分总结
  17. 天津仁爱学院2021级高职升本科新生报到须知
  18. 脉冲星测时软件TEMPO2安装
  19. 扇贝编程可以用c语言吗,扇贝编程手机版下载_扇贝编程app下载 v1.1.41 - 87G手游网...
  20. 海洋主题绘画_儿童画创意 | 三个海洋主题课例分享,超有创意的教程

热门文章

  1. SQL Server数据库创建、分离、备份、删除与操作详细
  2. 最大似然估计(MLE)
  3. 被Adobe官宣死亡后,延续Flash游戏的n种方法
  4. 蓝桥杯B组C题冶炼金属(二分查找)
  5. opencv之圆形检测
  6. 查询选修了全部课程的学生姓名(帮助理解)
  7. catf1ag CTF刷题1(比较入门)
  8. AC5 AC6 CMSIS符号对照表
  9. CTF_论剑场 misc杂项 WriteUp(持续更新)
  10. linux 命令行 过滤,Linux常用文本过滤命令(find grep wc awk sed sort uniq split)