摘要:所以制作各種各樣的輪播組件還是得心應手。第一種輪播圖如上圖所示。因為初始值是,所有向左邊滑動一定是負值??梢缘玫揭欢ㄊ???梢阅玫疆斍暗奈恢靡约爱斍八幍奈恢?。是運動結束后的回調,用來設置的。
輪播圖也涉及到觸摸和觸摸反饋,同時,AlloyTouch可以把慣性運動打開或者關閉,并且設置min和max為運動區(qū)域,超出會自動回彈。
除了一般的豎向滾動,AlloyTouch也可以支持橫向滾動,甚至任何屬性的運動,因為它的設計的本質就是屬性無關,觸摸可以反饋到任何屬性的運動。所以AlloyTouch制作各種各樣的輪播組件還是得心應手。
第一種輪播圖如上圖所示。下面開始實現(xiàn)的過程。
第0秒一共五張圖,每張圖占有屏幕比例的百分之88,所以用戶的屏幕里可以看到一張多一點的圖片,給用戶可以橫向滑動查看的感覺。
第10秒通過Transform(scroller); 注入CSS3 transform屬性。
第20秒new AlloyTouch({ touch: "#carousel-container",//反饋觸摸的dom vertical: false,// 監(jiān)聽用戶橫向觸摸 target: scroller, //運動的對象 property: "translateX", //被運動的屬性 min:0.88 * window.innerWidth * -5 + window.innerWidth, max: 0 })
這里最大的難點(其實也沒有什么難的),就是就是min的值。因為初始值是0,所有向左邊滑動一定是負值??梢缘玫絤ax一定是0。
那么min的值就是: 屏幕的寬度-圖片的張數(shù)*圖片的寬度
圖片的寬度為0.88 * window.innerWidth
屏幕的寬度為window.innerWidth
圖片的張數(shù)為 5
第30秒如上圖所示,相對于傳統(tǒng)的swipe然后再去觸發(fā)滾動,上面的跟手然后再去校正的體驗是更加良好的。那么怎么實現(xiàn)呢?
首先,AlloyTouch是支持step配置。
new AlloyTouch({ step: 100, ... ... ... })
只要用戶設置的step,最后運動結束之后,AlloyTouch都會幫用戶校正到最接近的step的整數(shù)倍的位置。
比如上面是100:
如果運動的對象停在 120,會被校正到100
如果運動的對象停在 151,會被校正到200
如果運動的對象停在 281,會被校正到300
如果運動的對象停在 21,會被校正到0
第40秒當然這有個問題,比如用戶從0滑倒30,其實他是想去100,但是會被校正到0!!!
所以光使用校正是不夠。還需要一個API去阻止校正自己去注入邏輯滾動相應的位置。所以你必須支持AlloyTouch的:
to 方法
to(v [, time, easing])
其中time和easing不是必須。time的默認值是600.
第50秒var items = document.querySelectorAll("#nav a"); var scroller = document.querySelector("#carousel-scroller"); Transform(scroller); new AlloyTouch({ touch: "#carousel-container",//反饋觸摸的dom vertical: false,//不必需,默認是true代表監(jiān)聽豎直方向touch target: scroller, //運動的對象 property: "translateX", //被運動的屬性 min: window.innerWidth * -3, //不必需,運動屬性的最小值 max: 0, //不必需,滾動屬性的最大值 step: window.innerWidth, inertia: false, //不必需,是否有慣性。默認是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"); } } } })
因為一共四張圖,所以
min得到的結果是 window.innerWidth * -3
max的值依然是0
step的值是 window.innerWidth
通過設置 inertia: false,把慣性運動關掉
注意看touchEnd里面的return false是為了不去計算手指離開屏幕后的校正位置、慣性運動等邏輯。
touchEnd可以拿到當前的位置v以及當前所處的位置index。
animationEnd是運動結束后的回調,用來設置nav的active。當然不是所有瀏覽器都支持classList,這里只是為了演示代碼足夠簡潔。
再注意,在touchEnd和animationEnd中能拿到this,也就是AlloyTouch當前對象的實例。其中,
to方法用來運動當前對象
step是當前的步長
還可以拿到currentPage去獲取當前所處的頁碼
還能拿到min和max值,得到運動的區(qū)間。
所有例子演示和代碼可以在Github上找到。
Github:https://github.com/AlloyTeam/AlloyTouch
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/91277.html
摘要:同行這么做使用實現(xiàn)圓形進度條前端掘金在開發(fā)微信小程序的時候,遇到圓形進度條的需求。實現(xiàn)也談數(shù)組去重前端掘金的數(shù)組去重是一個老生常談的話題了。百度前端技術學院自定義前端掘金一標簽概念元素表示用戶界面中項目的標題。 閑話圖片上傳 - 掘金作者:孫輝,美團金融前端團隊成員。15年畢業(yè)加入美團,相信技術,更相信技術只是大千世界里知識的一種,個人博客: https://sunyuhui.com ...
摘要:同行這么做使用實現(xiàn)圓形進度條前端掘金在開發(fā)微信小程序的時候,遇到圓形進度條的需求。實現(xiàn)也談數(shù)組去重前端掘金的數(shù)組去重是一個老生常談的話題了。百度前端技術學院自定義前端掘金一標簽概念元素表示用戶界面中項目的標題。 閑話圖片上傳 - 掘金作者:孫輝,美團金融前端團隊成員。15年畢業(yè)加入美團,相信技術,更相信技術只是大千世界里知識的一種,個人博客: https://sunyuhui.com ...
原文鏈接:https://github.com/AlloyTeam/AlloyTouch/wiki/AlloyTouch-FullPage-Plugin 先驗貨 showImg(https://segmentfault.com/img/remote/1460000007885626?w=280&h=280); 插件代碼可以在這里找到。 注意,雖然是掃碼體驗,但是AlloyTouch.FullPag...
閱讀 2467·2021-09-28 09:36
閱讀 3609·2021-09-22 15:41
閱讀 4413·2021-09-04 16:45
閱讀 1999·2019-08-30 15:55
閱讀 2852·2019-08-30 13:49
閱讀 831·2019-08-29 16:34
閱讀 2378·2019-08-29 12:57
閱讀 1688·2019-08-26 18:42