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

基于zepto的移動(dòng)端輕量級(jí)日期插件--date_picker

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

前言

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

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

只保留最必要的功能

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

保留必要的依賴

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

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

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

功能介紹

直接上圖:

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

transitionEnd事件

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

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

對(duì)于移動(dòng)Web開發(fā)足矣!

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

 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();
 };

插件外置兩個(gè)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)題字體變換的滑動(dòng)門菜單效果

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

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

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

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

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

    這篇文章主要介紹了jQuery中offset()方法用法,實(shí)例分析了offset()方法的功能、定義及返回或設(shè)置所匹配元素相對(duì)于document對(duì)象的偏移量時(shí)的使用技巧,需要的朋友可以參考下
    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切換式瀏覽卻可以解決這個(gè)問題
    2013-04-04
  • jquery ready(fn)事件使用介紹

    jquery ready(fn)事件使用介紹

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

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

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

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

    MixItUp過濾排序jQuery插件是一款鼠標(biāo)滑過圖片顯示描述的jQuery過濾排序插件。是一款輕量,但功能強(qiáng)大的 jQuery 插件,提供了對(duì)分類和有序內(nèi)容的美麗的動(dòng)畫過濾和排序功能。特別適合用于作品集網(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之前我們常常會(huì)考慮jQuery應(yīng)該選擇什么版本?現(xiàn)在jquery一般用什么版本以及jquery ie8的兼容版本和jquery什么版本穩(wěn)定等問題,下面通過這篇文章來看看詳細(xì)的介紹吧。
    2017-04-04
  • jQuery 如何實(shí)現(xiàn)一個(gè)滑動(dòng)按鈕開關(guān)

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

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

最新評(píng)論

宿州市| 汉沽区| 西峡县| 平安县| 嘉祥县| 福州市| 杨浦区| 承德县| 昔阳县| 康平县| 抚宁县| 涟水县| 开封市| 夹江县| 紫阳县| 光泽县| 东阿县| 珲春市| 康乐县| 那坡县| 左权县| 剑阁县| 车致| 临泽县| 天全县| 雷山县| 县级市| 蕲春县| 炎陵县| 锦州市| 桃园县| 汽车| 茶陵县| 民勤县| 蕉岭县| 永昌县| 临汾市| 华安县| 镇雄县| 彭泽县| 清水河县|