国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

BetterScroll 在移動端滾動場景的應用

2024-05-06 15:26:34
字體:
供稿:網(wǎng)友

BetterScroll 是一款重點解決移動端各種滾動場景需求的開源插件( GitHub地址 ),適用于滾動列表、選擇器、輪播圖、索引列表、開屏引導等應用場景。

為了滿足這些場景,它不僅支持慣性滾動、邊界回彈、滾動條淡入淡出等效果的靈活配置,讓滾動更加流暢,同時還提供了很多 API 方法和事件,以便我們更快地實現(xiàn)滾動場景下的需求,如下拉刷新、上拉加載。

由于它基于原生 JavaScript 實現(xiàn),不依賴任何框架,所以既可以原生 JavaScript 引用,也可以與目前前端 MVVM 框架結(jié)合使用,比如,其官網(wǎng)上的示例就是與 Vue 的結(jié)合。

首先,讓我們來看一下它是怎樣讓滾動更流暢的吧。

讓滾動更流暢

在移動端,如果你使用過 overflow: scroll 生成一個滾動容器,會發(fā)現(xiàn)它的滾動是比較卡頓,呆滯的。為什么會出現(xiàn)這種情況呢?

因為我們早已習慣了目前的主流操作系統(tǒng)和瀏覽器視窗的滾動體驗,比如滾動到邊緣會有回彈,手指停止滑動以后還會按慣性繼續(xù)滾動一會,手指快速滑動時頁面也會快速滾動。而這種原生滾動容器卻沒有,就會讓人感到卡頓。

BetterScroll 的滾動體驗

試一試 BetterScroll 的滾動體驗吧。體驗地址

可以發(fā)現(xiàn),在增加慣性滾動,邊緣回彈等效果之后,明顯流暢、舒服了很多。那么,這些效果是怎么實現(xiàn)的呢?

慣性滾動

BetterScroll 在用戶滑動操作結(jié)束時,還會繼續(xù)慣性滾動一段。首先看一下源碼中的 BScroll.prototype._end 函數(shù),這是 touchend、mouseup、touchcancel、mousecancel 事件的處理函數(shù),也就是用戶滾動操作結(jié)束時的邏輯。

BScroll.prototype._end = function (e) {  ...  if (this.options.momentum && duration < this.options.momentumLimitTime && (absDistY > this.options.momentumLimitDistance || absDistX > this.options.momentumLimitDistance)) {   let momentumX = this.hasHorizontalScroll ? momentum(this.x, this.startX, duration, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options)    : {destination: newX, duration: 0}   let momentumY = this.hasVerticalScroll ? momentum(this.y, this.startY, duration, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options)    : {destination: newY, duration: 0}   newX = momentumX.destination   newY = momentumY.destination   time = Math.max(momentumX.duration, momentumY.duration)   this.isInTransition = 1  }  ...}

以上代碼的作用是,在用戶滑動操作結(jié)束時,如果需要開啟了慣性滾動,用 momentum 函數(shù)計算慣性滾動距離和時間。該函數(shù),根據(jù)用戶滑動操作的速度和 deceleration選項 ——慣性減速來計算滾動距離,至于滾動時間,也是一個可配置的選項。

function momentum(current, start, time, lowerMargin, wrapperSize, options) {  ... let distance = current - start let speed = Math.abs(distance) / time ... let duration = swipeTime let destination = current + speed / deceleration * (distance < 0 ? -1 : 1) ...}            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 车致| 巫溪县| 东阳市| 龙山县| 涡阳县| 沅陵县| 前郭尔| 右玉县| 洞口县| 辽阳市| 那坡县| 沅江市| 章丘市| 楚雄市| 嘉荫县| 临沂市| 九寨沟县| 莲花县| 迁西县| 哈密市| 察隅县| 将乐县| 宁安市| 都昌县| 龙井市| 新绛县| 湖南省| 彰化市| 普洱| 叶城县| 和龙市| 平湖市| 桃江县| 沛县| 凉城县| 玉树县| 临泽县| 莱阳市| 清远市| 礼泉县| 奉贤区|