純JS實現(xiàn)時間選擇器

用兩天晚上的時間用原生JS擼出一個時間選擇器,發(fā)現(xiàn)并沒有自己想象的那么復(fù)雜,只要了解關(guān)于JS的Date對象和方法、以及如何處理事件和DOM,基本就可以了。

時間選擇器

直接看DEMO

說說踩到的坑:

  • 關(guān)于觸發(fā)事件的元素
    JS的事件機(jī)制是由捕獲和冒泡組成的,先捕獲到最底部的元素,再逐層冒泡觸發(fā)事件。而在chrome開發(fā)中,可以通過event.srcElement 和 event.target 去獲取觸發(fā)的元素的,而在 firefox 中,只能通過 event.target 獲取, 通過查找資料,在 IE 中只能通過 event.srcElement 去獲取。
    about srcElement and target

  • 關(guān)于對象的比較
    如果你嘗試對兩個Date對象進(jìn)行大小的比較,你會發(fā)現(xiàn)可以得到結(jié)果,但如果使用 == 去比較,就永遠(yuǎn)都是 false。
    這個仔細(xì)想想就明白了,當(dāng)我們使用 > | < | >= | <= 這些符號去比較兩個對象時,比較的時候會自動調(diào)用 Object.valueOf() 函數(shù),如果 valueOf獲取到的還是對象無法比較的話,那么就會調(diào)用 Object.toString() 將對象轉(zhuǎn)化為字符串來比較;
    但是如果使用 == 或者 === 時, 比較的是對象的地址是否一樣,也就是這個變量存儲的指向?qū)ο蟮牡刂肥欠褚恢铝恕?/p>

這個可以通過下面的例子去理解:

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 可以獲取元素相對父容器的左邊距和頂部邊距,然后循環(huán)迭代到頂層節(jié)點,從而計算出元素的絕對位置, 有了絕對位置,可以通過 scrollLeft 和scrollTop 計算出元素相對于瀏覽器的位置。
    DEMO

資源

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • (續(xù)jQuery基礎(chǔ)(1)) 第5章 DOM節(jié)點的復(fù)制與替換 (1)DOM拷貝clone() 克隆節(jié)點是DOM的常...
    凜0_0閱讀 1,511評論 0 8
  • HTML標(biāo)簽解釋大全 一、HTML標(biāo)記 標(biāo)簽:!DOCTYPE 說明:指定了 HTML 文檔遵循的文檔類型定義(D...
    米塔塔閱讀 3,530評論 1 41
  • JavaScript 程序采用了異步事件驅(qū)動編程模型。在這種程序設(shè)計風(fēng)格下,當(dāng)文檔、瀏覽器、元素或與之相關(guān)的對象發(fā)...
    劼哥stone閱讀 1,333評論 3 11
  • 先上代碼 之前不知道為何會亂碼,這個星期這個作業(yè)就一直在我心里糾纏著我,今天冷靜的分析了一下原因,終于發(fā)現(xiàn)了問題,...
    Snow__閱讀 429評論 0 0

友情鏈接更多精彩內(nèi)容