国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

如何造一個(gè)移動(dòng)端的聯(lián)動(dòng)選擇器(二)

leeon / 2808人閱讀

摘要:寫在前面之前寫了一篇為移動(dòng)端而生的自定義多級(jí)聯(lián)動(dòng)選擇器,得到了很多人的關(guān)注。預(yù)知后話地址為移動(dòng)端而生的自定義多級(jí)聯(lián)動(dòng)選擇器到此,的操作和手勢(shì)算法就已經(jīng)基本掌握了。

寫在前面

之前寫了一篇 MultiPicker -『為移動(dòng)端而生』的自定義多級(jí)聯(lián)動(dòng)選擇器,得到了很多人的關(guān)注。鑒于很多人對(duì)這種手寫插件的過(guò)程很好奇,所以寫了幾篇文章,來(lái)說(shuō)說(shuō)它的成長(zhǎng)史~

在閱讀本文之前,確保你有稍微看過(guò) MultiPicker 的源碼 喔~

點(diǎn)擊查看源碼 ,也可以在 npm 上找到他們:

日期選擇器 - DateSelector - NPM.

自定義json選擇器 - MultiPicker. NPM.

回顧上集:如何造一個(gè)移動(dòng)端的聯(lián)動(dòng)選擇器(一)

二、彈層的實(shí)現(xiàn) & DOM的小技巧 思考第3個(gè)問(wèn)題:『如何實(shí)現(xiàn)彈層,使得插件能夠兼容更多框架,并且樣式上萬(wàn)無(wú)一失?』

實(shí)現(xiàn)彈層的思路:【插入DOM → 初始化聯(lián)動(dòng)的數(shù)據(jù) → 綁定事件 】

① 在插入DOM的部分( initDomFuc ),采用字符串拼接的方式插入DOM(而不是使用字符串模板)。

聯(lián)動(dòng)的主要結(jié)構(gòu)式如下圖:

每個(gè)聯(lián)動(dòng)是一個(gè) div,div 包裹著一個(gè) ul,ul 中的每個(gè) li 就是聯(lián)動(dòng)的值

其中div的高度是5個(gè) li 的高度,ul的高度是實(shí)際的所有 li 的高度。

② 在初始化聯(lián)動(dòng)數(shù)據(jù)的部分( initReady ),在頭尾分別插入兩個(gè)空字符,能夠起到占位符的作用,這樣在計(jì)算手勢(shì)的translate3d的時(shí)候更方便。

③ 為DOM元素綁定事件時(shí),具體做法有兩步:

第一步:為每個(gè)初始化好的ul綁定touch事件( initReady );

第二步:為一些操作按鈕綁定事件( initBinding )。

③ - 第一步:touch事件的種類無(wú)非就是 touchstart、touchmove 和 touchend。但需要在每次滑動(dòng)的時(shí)候記錄一些數(shù)據(jù)。這是為了實(shí)現(xiàn)一個(gè)滑動(dòng)加速度的效果,下文會(huì)說(shuō)到。

③ - 第二步:用到了自己封裝的一個(gè)簡(jiǎn)單的事件監(jiān)聽函數(shù)on

這個(gè)函數(shù)主要用在【觸發(fā)】【取消】和【提交】這幾個(gè)重要按鈕上。

PS:在設(shè)計(jì)樣式的過(guò)程中考慮到,完整使用【年月日時(shí)分】五種時(shí)間單位的場(chǎng)景居多,為了優(yōu)化界面和用戶體驗(yàn),所以在日期選擇器的設(shè)計(jì)中,需要設(shè)計(jì)一種帶tab切換效果的完整版日期選擇器。其他場(chǎng)景中不會(huì)出現(xiàn)。

三、加速度的實(shí)現(xiàn) 思考第4個(gè)問(wèn)題:『如何判斷滑動(dòng)的手勢(shì),讓滑動(dòng)帶有加速度?』

我發(fā)現(xiàn),無(wú)論用戶使用哪個(gè)手指,只要用戶的滑動(dòng)弧長(zhǎng)在短時(shí)間內(nèi)比較大的話,說(shuō)明用戶比較想快速向上滑或是向下滑。比如,在選擇出生年份的時(shí)候,用戶肯定會(huì)想快速滑到上面的部分,就會(huì)用很快速的手勢(shì)向下滑動(dòng)一個(gè)比較大的弧長(zhǎng)。這時(shí)候就應(yīng)該有一個(gè)滑動(dòng)加速度的效果。

那么如何實(shí)現(xiàn)呢,如何判斷用戶想要快速滑動(dòng)呢?

很簡(jiǎn)單,只需要考慮,單位時(shí)間內(nèi)的速度變化率,也就是加速度,就行了。

之前提到過(guò),在touchmove的過(guò)程中會(huì)有一個(gè) 【speed數(shù)組】用來(lái)存儲(chǔ)滑動(dòng)時(shí),手勢(shì)的速度。

并在touchend中調(diào)用 initSpeed 函數(shù),確定最后 transition-duration 的值。

initSpeed 的主要工作是計(jì)算 speed 中的速度方差,方差和加速度是成正相關(guān)的。

所以當(dāng)方差大于0.1時(shí),ul 的實(shí)際滑動(dòng)距離是手勢(shì)滑動(dòng)距離的兩倍,transition-duration的值為0.2s;

而當(dāng)方差小于0.1的時(shí)候,就認(rèn)為基本是勻速滑動(dòng),ul 的實(shí)際滑動(dòng)距等于手勢(shì)滑動(dòng)距離,取 speed[0] 作為 transition-duration 的值。

確定好了滑動(dòng)距離之后,就可以計(jì)算最后停留的位置 translate3d ( initPosition )。

滑動(dòng)加速度的效果就基本實(shí)現(xiàn)了。

預(yù)知后話

Github地址:『為移動(dòng)端而生』的自定義多級(jí)聯(lián)動(dòng)選擇器

到此,dom的操作和手勢(shì)算法就已經(jīng)基本掌握了。

預(yù)知后話,后兩天見(jiàn)分曉

我是嘉寶Appian,一個(gè)賣萌出家的算法妹紙。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/54383.html

相關(guān)文章

  • 如何一個(gè)移動(dòng)端的聯(lián)動(dòng)選擇(四)

    摘要:寫在前面之前寫了一篇為移動(dòng)端而生的自定義多級(jí)聯(lián)動(dòng)選擇器,得到了很多人的關(guān)注。具體實(shí)現(xiàn)步驟如下先傳入一個(gè)需要計(jì)算深度的對(duì)象給,判斷如果還有則迭代,并計(jì)算深度。如果增加了聯(lián)動(dòng)級(jí)數(shù)需要來(lái)判斷,則為新增加的聯(lián)動(dòng)綁定新的事件。 寫在前面 之前寫了一篇 MultiPicker -『為移動(dòng)端而生』的自定義多級(jí)聯(lián)動(dòng)選擇器,得到了很多人的關(guān)注。鑒于很多人對(duì)這種手寫插件的過(guò)程很好奇,所以寫了幾篇文章,來(lái)說(shuō)...

    ssshooter 評(píng)論0 收藏0
  • 如何一個(gè)移動(dòng)端的聯(lián)動(dòng)選擇(四)

    摘要:寫在前面之前寫了一篇為移動(dòng)端而生的自定義多級(jí)聯(lián)動(dòng)選擇器,得到了很多人的關(guān)注。具體實(shí)現(xiàn)步驟如下先傳入一個(gè)需要計(jì)算深度的對(duì)象給,判斷如果還有則迭代,并計(jì)算深度。如果增加了聯(lián)動(dòng)級(jí)數(shù)需要來(lái)判斷,則為新增加的聯(lián)動(dòng)綁定新的事件。 寫在前面 之前寫了一篇 MultiPicker -『為移動(dòng)端而生』的自定義多級(jí)聯(lián)動(dòng)選擇器,得到了很多人的關(guān)注。鑒于很多人對(duì)這種手寫插件的過(guò)程很好奇,所以寫了幾篇文章,來(lái)說(shuō)...

    cgspine 評(píng)論0 收藏0
  • 如何一個(gè)移動(dòng)端的聯(lián)動(dòng)選擇(四)

    摘要:寫在前面之前寫了一篇為移動(dòng)端而生的自定義多級(jí)聯(lián)動(dòng)選擇器,得到了很多人的關(guān)注。具體實(shí)現(xiàn)步驟如下先傳入一個(gè)需要計(jì)算深度的對(duì)象給,判斷如果還有則迭代,并計(jì)算深度。如果增加了聯(lián)動(dòng)級(jí)數(shù)需要來(lái)判斷,則為新增加的聯(lián)動(dòng)綁定新的事件。 寫在前面 之前寫了一篇 MultiPicker -『為移動(dòng)端而生』的自定義多級(jí)聯(lián)動(dòng)選擇器,得到了很多人的關(guān)注。鑒于很多人對(duì)這種手寫插件的過(guò)程很好奇,所以寫了幾篇文章,來(lái)說(shuō)...

    leiyi 評(píng)論0 收藏0
  • 如何一個(gè)移動(dòng)端的聯(lián)動(dòng)選擇

    摘要:寫在前面之前寫了一篇為移動(dòng)端而生的自定義多級(jí)聯(lián)動(dòng)選擇器,得到了很多人的關(guān)注。預(yù)知后話地址為移動(dòng)端而生的自定義多級(jí)聯(lián)動(dòng)選擇器到此,的操作和手勢(shì)算法就已經(jīng)基本掌握了。 寫在前面 之前寫了一篇 MultiPicker -『為移動(dòng)端而生』的自定義多級(jí)聯(lián)動(dòng)選擇器,得到了很多人的關(guān)注。鑒于很多人對(duì)這種手寫插件的過(guò)程很好奇,所以寫了幾篇文章,來(lái)說(shuō)說(shuō)它的成長(zhǎng)史~ 在閱讀本文之前,確保你有稍微看過(guò) Mu...

    ivyzhang 評(píng)論0 收藏0
  • 如何一個(gè)移動(dòng)端的聯(lián)動(dòng)選擇

    摘要:寫在前面之前寫了一篇為移動(dòng)端而生的自定義多級(jí)聯(lián)動(dòng)選擇器,得到了很多人的關(guān)注。預(yù)知后話地址為移動(dòng)端而生的自定義多級(jí)聯(lián)動(dòng)選擇器到此,的操作和手勢(shì)算法就已經(jīng)基本掌握了。 寫在前面 之前寫了一篇 MultiPicker -『為移動(dòng)端而生』的自定義多級(jí)聯(lián)動(dòng)選擇器,得到了很多人的關(guān)注。鑒于很多人對(duì)這種手寫插件的過(guò)程很好奇,所以寫了幾篇文章,來(lái)說(shuō)說(shuō)它的成長(zhǎng)史~ 在閱讀本文之前,確保你有稍微看過(guò) Mu...

    wslongchen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<