色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

JS組件庫(kù)AlloyTouch實(shí)現(xiàn)圖片輪播過(guò)程解析

瀏覽:109日期:2024-05-06 11:37:59

輪播圖也涉及到觸摸和觸摸反饋,同時(shí),AlloyTouch可以把慣性運(yùn)動(dòng)打開(kāi)或者關(guān)閉,并且設(shè)置min和max為運(yùn)動(dòng)區(qū)域,超出會(huì)自動(dòng)回彈。

除了一般的豎向滾動(dòng),AlloyTouch也可以支持橫向滾動(dòng),甚至任何屬性的運(yùn)動(dòng),因?yàn)樗脑O(shè)計(jì)的本質(zhì)就是屬性無(wú)關(guān),觸摸可以反饋到任何屬性的運(yùn)動(dòng)。所以AlloyTouch制作各種各樣的輪播組件還是得心應(yīng)手。

JS組件庫(kù)AlloyTouch實(shí)現(xiàn)圖片輪播過(guò)程解析

第一種輪播圖如上圖所示。下面開(kāi)始實(shí)現(xiàn)的過(guò)程。

第0秒

<div id='carousel-container'> <div class='carousel'> <div id='carousel-scroller'> <img src='http://m.lshqa.cn/bcjs/asset/ci1.jpg'> <img src='http://m.lshqa.cn/bcjs/asset/ci2.jpg'> <img src='http://m.lshqa.cn/bcjs/asset/ci3.jpg'> <img src='http://m.lshqa.cn/bcjs/asset/ci4.jpg'> <img src='http://m.lshqa.cn/bcjs/asset/ci5.jpg'> </div> </div></div>

一共五張圖,每張圖占有屏幕比例的百分之88,所以用戶的屏幕里可以看到一張多一點(diǎn)的圖片,給用戶可以橫向滑動(dòng)查看的感覺(jué)。

第10秒

<script src='http://m.lshqa.cn/transformjs/transform.js'></script><script src='http://m.lshqa.cn/alloy_touch.js'></script><script> var scroller = document.querySelector('#carousel-scroller'); Transform(scroller); </script>

通過(guò)Transform(scroller); 注入CSS3 transform屬性。

第20秒

new AlloyTouch({ touch: '#carousel-container',//反饋觸摸的dom vertical: false,// 監(jiān)聽(tīng)用戶橫向觸摸 target: scroller, //運(yùn)動(dòng)的對(duì)象 property: 'translateX', //被運(yùn)動(dòng)的屬性 min:0.88 * window.innerWidth * -5 + window.innerWidth, max: 0})

這里最大的難點(diǎn)(其實(shí)也沒(méi)有什么難的),就是就是min的值。因?yàn)槌跏贾凳?,所有向左邊滑動(dòng)一定是負(fù)值。可以得到max一定是0。

那么min的值就是: 屏幕的寬度-圖片的張數(shù)*圖片的寬度

圖片的寬度為0.88 * window.innerWidth 屏幕的寬度為window.innerWidth 圖片的張數(shù)為 5

JS組件庫(kù)AlloyTouch實(shí)現(xiàn)圖片輪播過(guò)程解析

第30秒

如上圖所示,相對(duì)于傳統(tǒng)的swipe然后再去觸發(fā)滾動(dòng),上面的跟手然后再去校正的體驗(yàn)是更加良好的。那么怎么實(shí)現(xiàn)呢?首先,AlloyTouch是支持step配置。

new AlloyTouch({step: 100,.........})

只要用戶設(shè)置的step,最后運(yùn)動(dòng)結(jié)束之后,AlloyTouch都會(huì)幫用戶校正到最接近的step的整數(shù)倍的位置。

比如上面是100:

如果運(yùn)動(dòng)的對(duì)象停在 120,會(huì)被校正到100 如果運(yùn)動(dòng)的對(duì)象停在 151,會(huì)被校正到200 如果運(yùn)動(dòng)的對(duì)象停在 281,會(huì)被校正到300 如果運(yùn)動(dòng)的對(duì)象停在 21,會(huì)被校正到0

第40秒

當(dāng)然這有個(gè)問(wèn)題,比如用戶從0滑倒30,其實(shí)他是想去100,但是會(huì)被校正到0!!!

所以光使用校正是不夠。還需要一個(gè)API去阻止校正自己去注入邏輯滾動(dòng)相應(yīng)的位置。所以你必須支持AlloyTouch的:

to 方法

to(v [, time, easing])

其中time和easing不是必須。time的默認(rèn)值是600.

第50秒

var items = document.querySelectorAll('#nav a');var scroller = document.querySelector('#carousel-scroller');Transform(scroller);new AlloyTouch({ touch: '#carousel-container',//反饋觸摸的dom vertical: false,//不必需,默認(rèn)是true代表監(jiān)聽(tīng)豎直方向touch target: scroller, //運(yùn)動(dòng)的對(duì)象 property: 'translateX', //被運(yùn)動(dòng)的屬性 min: window.innerWidth * -3, //不必需,運(yùn)動(dòng)屬性的最小值 max: 0, //不必需,滾動(dòng)屬性的最大值 step: window.innerWidth, inertia: false, //不必需,是否有慣性。默認(rèn)是true touchEnd: function (evt, v, index) { var step_v = index * this.step * -1; var dx = v - step_v; if (v < this.min) { this.to(this.min); } else if (v > this.max) { this.to(this.max); } else if (Math.abs(dx) < 30) { this.to(step_v); } else if (dx > 0) { this.to(step_v + this.step); } else { this.to(step_v - this.step); } return false; }, animationEnd: function (evt , v) { var i = 0, len = items.length; for (; i < len; i++) { if (i === this.currentPage) { items[i].classList.add('active'); } else { items[i].classList.remove('active'); } } }})

因?yàn)橐还菜膹垐D,所以min得到的結(jié)果是 window.innerWidth * -3max的值依然是0step的值是 window.innerWidth通過(guò)設(shè)置 inertia: false,把慣性運(yùn)動(dòng)關(guān)掉注意看touchEnd里面的return false是為了不去計(jì)算手指離開(kāi)屏幕后的校正位置、慣性運(yùn)動(dòng)等邏輯。touchEnd可以拿到當(dāng)前的位置v以及當(dāng)前所處的位置index。animationEnd是運(yùn)動(dòng)結(jié)束后的回調(diào),用來(lái)設(shè)置nav的active。當(dāng)然不是所有瀏覽器都支持classList,這里只是為了演示代碼足夠簡(jiǎn)潔。再注意,在touchEnd和animationEnd中能拿到this,也就是AlloyTouch當(dāng)前對(duì)象的實(shí)例。其中,to方法用來(lái)運(yùn)動(dòng)當(dāng)前對(duì)象step是當(dāng)前的步長(zhǎng)還可以拿到currentPage去獲取當(dāng)前所處的頁(yè)碼還能拿到min和max值,得到運(yùn)動(dòng)的區(qū)間。

最后

所有例子演示和代碼可以在Github上找到。

Github:https://github.com/AlloyTeam/AlloyTouch

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 久久精选视频 | 91欧美激情一区二区三区成人 | 亚洲日本在线看片 | 99视频在线永久免费观看 | 综合 欧美 亚洲日本 | 午夜伦y4480影院中文字幕 | 中文字幕99在线精品视频免费看 | 亚洲精品久久久久久久无 | 亚洲一区二区三区福利在线 | 99热只有精品一区二区 | 黄色在线视频网 | 纯欧美一级毛片_免费 | 欧美综合一区二区三区 | 亚洲国产成人影院播放 | 欧美综合自拍亚洲综合 | 亚洲午夜a | 一色屋色费精品视频在线看 | 免费看欧美xxx片 | 国产精自产拍久久久久久 | 国产精品九九 | 韩国福利影视一区二区三区 | 久久精品国产99久久香蕉 | 亚洲欧美一区二区三区孕妇 | 日本三级久久 | 免费的一级片网站 | 秀人网私拍福利视频在线 | 一级特黄爽大片刺激 | 亚洲国产精品综合久久网络 | 亚洲精品一区二区手机在线 | 寡妇一级毛片 | 国产91九色刺激露脸对白 | 日韩欧美亚洲综合久久99e | 宫女淫春3在线观 | 免费在线观看a | 国产人成亚洲第一网站在线播放 | 在线一区视频 | 国产一区二区亚洲精品天堂 | 国产精品久久久久久久久久久久久久 | 99在线精品视频在线观看 | 99色视频在线观看 | 日本一区二区三区在线 视频 |