最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于zepto的移動端輕量級日期插件--date_picker

 更新時間:2016年03月04日 09:00:48   投稿:hebedich  
這篇文章主要介紹了基于zepto的移動端輕量級日期插件--date_picker,需要的朋友可以參考下

前言

做過移動Web開發(fā)的同學(xué)都知道,移動端日期選擇是很常見的需求。在PC端,我們有很豐富的選擇,比較出名的就有Mobiscroll和jQuery UI Datepicker。個人看來,這些插件存在的兩個顯而易見的問題,第一是過重的依賴,對于jQuery的插件,已經(jīng)強(qiáng)制依賴了80多k的龐然大物,把很多移動端項(xiàng)目拒之門外;第二是太過強(qiáng)大的功能,很多插件花百分之八十的時間去完善插件百分之二十炫酷的額外功能,導(dǎo)致代碼量變大,配置繁雜。所以一款少依賴、輕量級和使用簡單的移動端日期選擇插件是非常必要的。本文簡單介紹近來寫的一款基于zepto的移動端輕量級日期插件--date_picker。

插件設(shè)計(jì)原則

只保留最必要的功能

日期選擇插件無非就是可以進(jìn)行年、月、日選擇,并且提供必要的年月切換動畫特效,至于什么最小時間、最大時間、主題定制,概不在本插件功能范圍。

保留必要的依賴

本插件雖說是基于zepto,實(shí)際上還隱性依賴了Github上面一個比較牛的庫fastclick。我們知道,移動端點(diǎn)擊事件處理有兩個常見的問題:(1)移動端click事件有300ms,通常采用touch事件來代替click事件來提高靈敏性;(2)touch事件會存在穿透的問題,一般插件都不用touch事件;基于這兩個問題,fastclick做了兼容,只需要簡單調(diào)用它提供的api就能夠愉快得和原本一樣調(diào)用click事件,所以這個依賴不能省。至于依賴zepto,實(shí)際上是可有可無的,一來博主平時工作都是寫原生js的,不用插件也沒多大的感覺,二來插件受眾面就會小一些。不過鑒于zepto在移動端已然和zepto在PC端一樣如魚得水,就毫不客氣采用了。

既能夠支持模塊化又能本地引用文件使用的

久遠(yuǎn)一點(diǎn)的插件基本都是讓你下載一個文件,然后用script去引用,這樣本無可厚非,只不過放著最大的包管理器npm不用,豈不是對不起頁面仔這個稱號。所以本插件支持文件引用也支持CMD方式的模塊引用。

功能介紹

直接上圖:

技術(shù)細(xì)節(jié)

transitionEnd事件

插件的主面板是當(dāng)前月份的天數(shù)詳情,如果點(diǎn)擊上一個月或者下一個月插件需要計(jì)算出上一個月或者下一個月的天數(shù)信息,然后插入到DOM節(jié)點(diǎn)中。在插入到DOM節(jié)點(diǎn)之后,就需要采用動畫效果來顯示最新的一月并且褪去老的一個月,采用的方式是CSS2d轉(zhuǎn)化加過渡。我們需要處理的就是在舊的一個月褪去看不見的時候及時從DOM樹中刪除,不然如果用戶一直點(diǎn)下一個月或者上一個月的話,內(nèi)存會炸的。為了實(shí)現(xiàn)這個移除功能,一個辦法是采用setTimeout事件在特定的時間去刪除節(jié)點(diǎn),經(jīng)過嘗試,發(fā)現(xiàn)由于Javascript定時器不準(zhǔn)確的特性和前后一個月切換帶來的邏輯復(fù)雜度增加,這種方案很不可行。
于是,本插件采用了第二個方案:transitionEnd事件。直接引用一下MDN的介紹:

The transitionend event is fired when a CSS transition has completed. In the case where a transition is removed before completion, such as if the transition-property is removed, then the event will not fire. The event will also not fire if the animated element becomes display: none before the transition fully completes.

也就是只要你不去隨便亂動元素的CSS屬性,在動畫完成的時候,你就可以執(zhí)行相應(yīng)的操作(刪除節(jié)點(diǎn))。
再來看看兼容性:

對于移動Web開發(fā)足矣!

最后就是在綁定事件的兼容性問題,不同廠商對于這個事件的定義并不一致,比如IOS里面監(jiān)聽的是transitionend事件,但是在安卓里面監(jiān)聽transitionend事件完全沒反應(yīng),經(jīng)過一番Google,發(fā)現(xiàn)安卓需要監(jiān)聽webkitTransitionEnd事件。為了解決綁定事件時候的兼容性問題,就需要檢測瀏覽器到底支持哪種事件。下面貼上Stackoverflow上面一個問答的代碼片段:

 function whichTransitionEvent() {
  var t,
   el = document.createElement('fakeelement');
   transitions = {
    'OTransition'  :'oTransitionEnd',
    'MSTransition'  :'msTransitionEnd',
    'MozTransition'  :'transitionend',
    'WebkitTransition' :'webkitTransitionEnd',
    'transition'   :'transitionEnd'
   };

  for(t in transitions){
   if( el.style[t] !== undefined ){
    return transitions[t];
   }
  }

  return false;
 }

安裝使用

安裝

支持下面兩種方式

  1. git clone之后直接拷貝引用bin文件夾下面的datepicker.min.css和datepicker.min.js
  2. 從npm下載安裝:npm install --save date_picker

使用

引用樣式datepicker.min.css
引用datepicker.min.js或者引用模塊var DatePicker = require('date_picker');
實(shí)例化組件,綁定插件日期選擇完成之后的回調(diào)函數(shù)

var _date = document.getElementById('date');

 var datePicker = new DatePicker({
  confirmCbk: function(data) {
   _date.value = data.year + '-' + data.month + '-' + data.day;
  }
 });

 _date.onfocus = function(e) {
  _date.blur();
  datePicker.open();
 };

插件外置兩個API: open和close,其中特別注意上面demo中_date在獲取焦點(diǎn)之后里面強(qiáng)制去除了焦點(diǎn),是為了避免安卓下面為input標(biāo)簽設(shè)置readonly屬性并不能禁止原生鍵盤彈出的問題。

相關(guān)文章

  • jquery馬賽克拼接翻轉(zhuǎn)效果代碼分享

    jquery馬賽克拼接翻轉(zhuǎn)效果代碼分享

    這篇文章主要介紹了jquery馬賽克拼接翻轉(zhuǎn)效果,推薦給大家,有需要的小伙伴可以參考下。
    2015-08-08
  • jquery實(shí)現(xiàn)標(biāo)題字體變換的滑動門菜單效果

    jquery實(shí)現(xiàn)標(biāo)題字體變換的滑動門菜單效果

    這篇文章主要介紹了jquery實(shí)現(xiàn)標(biāo)題字體變換的滑動門菜單效果,通過調(diào)用自定義函數(shù)實(shí)現(xiàn)頁面tab切換及字體樣式同步變換的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • 基于jQuery.Validate驗(yàn)證庫知識點(diǎn)的詳解

    基于jQuery.Validate驗(yàn)證庫知識點(diǎn)的詳解

    本篇文章介紹了,基于jQuery.Validate驗(yàn)證庫知識點(diǎn)的詳解。需要的朋友參考下
    2013-04-04
  • jQuery中offset()方法用法實(shí)例

    jQuery中offset()方法用法實(shí)例

    這篇文章主要介紹了jQuery中offset()方法用法,實(shí)例分析了offset()方法的功能、定義及返回或設(shè)置所匹配元素相對于document對象的偏移量時的使用技巧,需要的朋友可以參考下
    2015-01-01
  • Jquery實(shí)現(xiàn)點(diǎn)擊切換圖片并隱藏顯示內(nèi)容(2種方法實(shí)現(xiàn))

    Jquery實(shí)現(xiàn)點(diǎn)擊切換圖片并隱藏顯示內(nèi)容(2種方法實(shí)現(xiàn))

    電腦屏幕大小是固定的,那么如何在有限的空間放更多的內(nèi)容呢,jquery的tab切換式瀏覽卻可以解決這個問題
    2013-04-04
  • jquery ready(fn)事件使用介紹

    jquery ready(fn)事件使用介紹

    當(dāng)DOM載入就緒可以查詢及操縱時綁定一個要執(zhí)行的函數(shù),下面有個示例,不懂的朋友可以學(xué)習(xí)下
    2013-08-08
  • jQuery中even選擇器的定義和用法

    jQuery中even選擇器的定義和用法

    這篇文章主要介紹了jQuery中even選擇器的定義和用法,較為詳細(xì)的分析了event選擇器的語法結(jié)構(gòu)與具體用法,并以一個設(shè)置偶數(shù)行為藍(lán)色字體的例子總結(jié)了其用法與功能特點(diǎn),需要的朋友可以參考下
    2014-12-12
  • jQuery插件MixItUp實(shí)現(xiàn)動畫過濾和排序

    jQuery插件MixItUp實(shí)現(xiàn)動畫過濾和排序

    MixItUp過濾排序jQuery插件是一款鼠標(biāo)滑過圖片顯示描述的jQuery過濾排序插件。是一款輕量,但功能強(qiáng)大的 jQuery 插件,提供了對分類和有序內(nèi)容的美麗的動畫過濾和排序功能。特別適合用于作品集網(wǎng)站,畫廊,圖片博客以及任何的分類或有序內(nèi)容。
    2015-04-04
  • 如何選擇jQuery版本 1.x? 2.x? 3.x?

    如何選擇jQuery版本 1.x? 2.x? 3.x?

    這篇文章主要給大家介紹了關(guān)于如何選擇jQuery版本,是1.x? 2.x?還是3.x? 在選擇使用jquery之前我們常常會考慮jQuery應(yīng)該選擇什么版本?現(xiàn)在jquery一般用什么版本以及jquery ie8的兼容版本和jquery什么版本穩(wěn)定等問題,下面通過這篇文章來看看詳細(xì)的介紹吧。
    2017-04-04
  • jQuery 如何實(shí)現(xiàn)一個滑動按鈕開關(guān)

    jQuery 如何實(shí)現(xiàn)一個滑動按鈕開關(guān)

    本文給大家分享一段jquery代碼實(shí)現(xiàn)滑動按鈕開關(guān)的效果,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的的朋友參考下
    2016-12-12

最新評論

囊谦县| 若尔盖县| 漳平市| 青田县| 富阳市| 威信县| 龙海市| 泾源县| 太谷县| 长葛市| 西丰县| 遂平县| 炎陵县| 金塔县| 香港 | 荔波县| 绥棱县| 莒南县| 贡觉县| 江孜县| 白银市| 漳浦县| 辛集市| 望都县| 平潭县| 敖汉旗| 大宁县| 疏勒县| 丁青县| 龙游县| 运城市| 宁远县| 平度市| 东港市| 文化| 云安县| 秀山| 曲松县| 尤溪县| 江口县| 安庆市|