纯JS实现时间选择器

用两天晚上的时间用原生JS撸出一个时间选择器,发现并没有自己想象的那么复杂,只要了解关于JS的Date对象和方法、以及如何处理事件和DOM,基本就可以了。

时间选择器

直接看DEMO

说说踩到的坑:

  • 关于触发事件的元素
    JS的事件机制是由捕获和冒泡组成的,先捕获到最底部的元素,再逐层冒泡触发事件。而在chrome开发中,可以通过event.srcElement 和 event.target 去获取触发的元素的,而在 firefox 中,只能通过 event.target 获取, 通过查找资料,在 IE 中只能通过 event.srcElement 去获取。
    about srcElement and target

  • 关于对象的比较
    如果你尝试对两个Date对象进行大小的比较,你会发现可以得到结果,但如果使用 == 去比较,就永远都是 false。
    这个仔细想想就明白了,当我们使用 > | < | >= | <= 这些符号去比较两个对象时,比较的时候会自动调用 Object.valueOf() 函数,如果 valueOf获取到的还是对象无法比较的话,那么就会调用 Object.toString() 将对象转化为字符串来比较;
    但是如果使用 == 或者 === 时, 比较的是对象的地址是否一样,也就是这个变量存储的指向对象的地址是否一致了。

这个可以通过下面的例子去理解:

var a = { 'a': 100};
var b = {'a': 100};
a == b // false
a > b // false
a < b // false
a >= b // true
a <= b // true
a.toString = function() { return 1000;}
b.toString = function() { return 999; }
a > b // true
a < b // false
a >= b // true
a <= b // false

a.valueOf = function() { return this['a'];}
a.valueOf = function() { return this['a'];}
a > b // false
a >= b // true
b < a // false
b <= a // true
  • 如何获取元素的绝对位置
    通过 obj.offsetLeft 和obj.offsetTop 可以获取元素相对父容器的左边距和顶部边距,然后循环迭代到顶层节点,从而计算出元素的绝对位置, 有了绝对位置,可以通过 scrollLeft 和scrollTop 计算出元素相对于浏览器的位置。
    DEMO

资源

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,534评论 19 139
  • (续jQuery基础(1)) 第5章 DOM节点的复制与替换 (1)DOM拷贝clone() 克隆节点是DOM的常...
    凛0_0阅读 1,504评论 0 8
  • HTML标签解释大全 一、HTML标记 标签:!DOCTYPE 说明:指定了 HTML 文档遵循的文档类型定义(D...
    米塔塔阅读 3,526评论 1 41
  • JavaScript 程序采用了异步事件驱动编程模型。在这种程序设计风格下,当文档、浏览器、元素或与之相关的对象发...
    劼哥stone阅读 1,330评论 3 11
  • 先上代码 之前不知道为何会乱码,这个星期这个作业就一直在我心里纠缠着我,今天冷静的分析了一下原因,终于发现了问题,...
    Snow__阅读 429评论 0 0

友情链接更多精彩内容