1. 程式人生 > >BetterScroll:在移動端滾動場景的應用

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

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

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

由於它基於原生 JavaScript 實現,不依賴任何框架,所以既可以原生 JavaScript 引用,也可以與目前前端 MVVM 框架結合使用,比如,其官網上的示例就是與 Vue 的結合。

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

讓滾動更流暢

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

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

BetterScroll 的滾動體驗

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

可以發現,在增加慣性滾動,邊緣回彈等效果之後,明顯流暢、舒服了很多。那麼,這些效果是怎麼實現的呢?

慣性滾動

BetterScroll 在使用者滑動操作結束時,還會繼續慣性滾動一段。首先看一下原始碼中的 BScroll.prototype._end 函式,這是 touchend、mouseup、touchcancel、mousecancel 事件的處理函式,也就是使用者滾動操作結束時的邏輯。

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 } ... }

以上程式碼的作用是,在使用者滑動操作結束時,如果需要開啟了慣性滾動,用 momentum 函式計算慣性滾動距離和時間。該函式,根據使用者滑動操作的速度和 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) ... }

邊緣回彈

超過邊緣時的回彈,有兩個處理步驟,第一步是滾動到超過邊界時速度要變慢,第二步是回彈到邊界。其中,第一步是在原始碼的 BScroll.prototype._move 函式,這是 touchmove 和 mousemove 事件的處理函式,也就是在使用者滑動操作過程中的邏輯。

// Slow down or stop if outside of the boundaries

相關推薦

BetterScroll移動滾動場景應用

rtx max 會有 快速滾動 container 切換圖片 real 由於 ecan BetterScroll 是一款重點解決移動端各種滾動場景需求的開源插件( GitHub地址 ),適用於滾動列表、選擇器、輪播圖、索引列表、開屏引導等應用場景。 為了滿足這些場景,它不僅

BetterScroll移動滾動場景應用

BetterScroll 是一款重點解決移動端各種滾動場景需求的開源外掛(GitHub地址),適用於滾動列表、選擇器、輪播圖、索引列表、開屏引導等應用場景。 為了滿足這些場景,它不僅支援慣性滾動、邊界回彈、滾動條淡入淡出等效果的靈活配置,讓滾動更加流暢,同時還提

移動 H5 場景應用【破繭成蝶】案例鑑賞

移動端 H5 場景應用【破繭成蝶】案例鑑賞 移動端【破繭成蝶】場景請用微信掃描二維碼訪問(溫馨提示:H5案例有聲音,請開啟聲音體驗): 案例: <!DOCTYPE HTML> <html> <head> <meta http-equiv

【MDCC專訪】劉昇平移動人工智慧最看好會話互動應用

2016 年 9 月 23-24 日,由 CSDN 和創新工場聯合主辦的“MDCC 2016 移動開發者大會• 中國”(Mobile Developer Conference China)將在北京•國家會議中心召開,來自iOS、Android、跨平臺開發、產品設

ui界面設計公司搜集精彩設計三十例移動APP界面設計欣賞之二

lis bin 郵箱 移動 藍藍設計 wid target tro 也會 如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這裏 藍藍設計是一家地處北京的界面設計公司,經常會接到移動端APP界面設計的項目,比如給一起海帶做的海外代購APP、給詞覓公司做的社交AP

移動二三事【二】移動觸摸事件點透及多種解決方案。

優化 提前 sta 屬性 lis 剛才 觸摸事件 功能 觸發 大家都知道的少說,多分享一些幹貨。 一、首先說移動端的三大主要事件: 1.手指按下: ontouchstart2.手指移動:ontouchmove3.手指擡起 ontouchend *使用移動端事件時,為盡

回顧2017系列篇(二)移動APP設計趨勢

原型設計 交互設計 界面設計 設計師 移動端APP在2017年經歷了諸多的變化, 人工智能、聊天式的界面、響應式設計、虛擬現實(VR)和增強現實(AR)讓設計師不斷面臨新的挑戰。研究表明,用戶每天耗費在手機和平板上的平均時長為158分鐘,其中127分鐘是耗費在各類APP中,可以看出移動端

第125天移動空白字符問題解決辦法

meta set idt tro contain nta 之間 空白字符 body 1、當我們想使用百分比來進行兩個盒子的並排 代碼: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head>

第126天移動-原生實現響應式模態框

flex col 16px position inter tween res doc text 下面采用HTML+CSS+JavaScript實現模態框,並采用Flex布局和多媒體查詢實現響應式。 一、模態框HTML代碼 1 <!DOCTYPE html>

第133天移動開發的一些總結

硬件 緩沖 post 優化 全局 密度 content 允許 接口 1、 piexl 像素知識 640 * 1136的圖片能不能在iphone5上完全展示?iphone5分辨率640*1136 邏輯像素與物理像素的關系px邏輯像素:瀏覽器使用的抽象單位dp,pt物理像素:設

前端性能優化(二)移動瀏覽器前端優化策略

因此 本地 網絡流量 桌面 cse kit 極致 加載 文件 相對於桌面端瀏覽器,移動端Web瀏覽器上有一些較為明顯的特點:設備屏幕較小、新特性兼容性較好、支持一些較新的HTML5和CSS3特性、需要與Native應用交互等。但移動端瀏覽器可用的CPU計算資源和網絡資源極為

移動滾動插件

lB github hub bar option HR 插件 BE tar 1.simulation-scroll-y.js https://fmover.hcysun.me/#/zh-cn/plugins/simulation-scroll-y?id=scrollbar

核心技術解析移動車牌識別系統方案

ocr文字識別 攝像頭 inf 人員 c代碼 cnblogs 單機 研發 安裝 國內目前OCR車牌識別技術,主要細分為:1.識別車牌號碼、2.車牌顏色、3.車牌類型等車牌特征信息;算法采用清華TH-OCR技術,不僅融合了車牌定位、車牌字符切分、車牌字符識別等算法,而且系統具

MetaHandler.js移動適配各種螢幕

JS:   !function () { var opt = function() { var ua = navigator.userAgent, android = ua.match(/(Android);?[\s\/]+([\d.]+)?/), ip

Hades移動靜態分析框架

只有通過別人的眼睛,才能真正地瞭解自己 ——《雲圖》 背景 作為全球最大的網際網路 + 生活服務平臺,美團點評近年來在業務上取得了飛速的發展。為支援業務的快速發展,移動研發團隊規模也逐漸從零星的小作坊式運營,演變為千人級研發軍團協同作戰。 在公司蓬勃發展的大背景下,移動專案架

AngularJS仿拉勾網WebApp開發移動單頁應用實戰 AngularJS實戰 共7章

第1章 課程介紹    講解課程開發內容和開發流程。前端主流開發框架與AngularJS對比。介紹AngularJS的基本概念。第2章 基礎知識介紹介紹單頁應用以及AngularJS web app的構成。講解css預編譯語言less的使用。第3章 使用構建工具講解構建工具gul

移動滾動穿透問題解決方案

一、 問題描述 移動端當position:fixed的彈窗彈出時,滑動彈窗,下層的頁面會跟隨滾動 二、 解決方案 1. body 設定overflow: hidden; 當彈窗彈出時,設定body元素的overflow屬性為hidden,暴力去除滾動。 缺點:會丟失頁面的滾動位置

重寫移動滾動條[iScroll.js核心程式碼]

最近寫元件庫的時後,發現這個滾動條是真的醜啊,決定重新擼一個滾動條: 首先咱們回顧一下移動端瀏覽器滾動條特性: 滾動條在開始滾動時漸顯,滾動結束後漸隱 滾動條不佔內容區寬度,懸浮固定 滾動條高度(深灰)和滾動區可視高度(淺灰)比等於滾動區可視高度和滾動目標的高度 當滾動目標的高度小於滾動區

移動滾動載入資料實現

模擬場景:移動端上劃到底,載入更多資料。 1、本例子基於jQuery實現。監聽滾動事件。 $(function(){ $(window).scroll(function(){ }) }) 2、獲取滾動條到文件頂部的距離,上圖scrollTop那段。原生JS可用document.documentElement

微信小程式入門(3)移動訪問PC

上一篇講了web-view的使用,然而你會發現這隻能訪問一些百度、淘寶、騰訊等一些存在的網站,但如何訪問自己本地ip以來訪問自己寫的一些網站呢? 注意:這篇文章是利用Python開發的web,可能對一些其他僅有HTML、css、js的靜態不太適用 對於Django部分本篇不做過多講解,以後