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

首頁(yè) > 開發(fā) > HTML5 > 正文

分享一個(gè)頁(yè)面平滑滾動(dòng)小技巧(推薦)

2024-09-05 07:19:29
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

背景

今天寫需求的時(shí)候發(fā)現(xiàn)一個(gè)小的優(yōu)化點(diǎn):用戶選擇了一些數(shù)據(jù)之后, 對(duì)應(yīng)列表中的數(shù)據(jù)需要高亮, 有時(shí)候列表很長(zhǎng), 為了提升用戶體驗(yàn),需要加個(gè)滾動(dòng), 自動(dòng)滾動(dòng)到目標(biāo)位置。

簡(jiǎn)單的處理了一下, 問題順利解決, 就把這個(gè)小技巧分享一下給大家。

正文

有幾種不同的方式來(lái)解決這個(gè)小問題。

1.scrollTop

第一想到的還是scrollTop, 獲取元素的位置, 然后直接設(shè)置:

// 設(shè)置滾動(dòng)的距離element.scrollTop = value;

不過(guò)這樣子有點(diǎn)生硬, 可以加個(gè)緩動(dòng):

var scrollSmoothTo = function (position) {    if (!window.requestAnimationFrame) {        window.requestAnimationFrame = function(callback, element) {            return setTimeout(callback, 17);        };    }    // 當(dāng)前滾動(dòng)高度    var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;    // 滾動(dòng)step方法    var step = function () {        // 距離目標(biāo)滾動(dòng)距離        var distance = position - scrollTop;        // 目標(biāo)滾動(dòng)位置        scrollTop = scrollTop + distance / 5;        if (Math.abs(distance) < 1) {            window.scrollTo(0, position);        } else {            window.scrollTo(0, scrollTop);            requestAnimationFrame(step);        }    };    step();};// 平滑滾動(dòng)到頂部,可以直接:scrollSmoothTo(0)

jQuery 中重的animate 方法也可以實(shí)現(xiàn)類似的效果:

$('xxx').animate({    scrollTop: 0});

2. scroll-behavior

把 scroll-behavior:smooth; 寫在滾動(dòng)容器元素上,也可以讓容器(非鼠標(biāo)手勢(shì)觸發(fā))的滾動(dòng)變得平滑。

.list {   scroll-behavior: smooth; }

在PC上, 網(wǎng)頁(yè)默認(rèn)滾動(dòng)是在<html>標(biāo)簽上的,移動(dòng)端大多數(shù)在<body> 標(biāo)簽上, 那么這行定義到全局的css中就是:

html, body {   scroll-behavior:smooth; }

美滋滋。

3. scrollIntoView

Element.scrollIntoView() 方法, 讓當(dāng)前的元素滾動(dòng)到瀏覽器窗口的可視區(qū)域內(nèi)。

語(yǔ)法:

var element = document.getElementById("box");element.scrollIntoView(); // 等同于element.scrollIntoView(true) element.scrollIntoView(alignToTop); // Boolean型參數(shù) element.scrollIntoView(scrollIntoViewOptions); // Object型參數(shù)

scrollIntoView 方法接受兩種形式的值:

布爾值

如果為true,元素的頂端將和其所在滾動(dòng)區(qū)的可視區(qū)域的頂端對(duì)齊。

  • 相應(yīng)的 scrollIntoViewOptions: {block: "start", inline: "nearest"}。這是這個(gè)參數(shù)的默認(rèn)值。

如果為false,元素的底端將和其所在滾動(dòng)區(qū)的可視區(qū)域的底端對(duì)齊。

  • 相應(yīng)的scrollIntoViewOptions: { block: "end", inline: "nearest" }Options 對(duì)象
{    behavior: "auto" | "instant" | "smooth", 默認(rèn)為 "auto"。    block: "start" | "end", 默認(rèn)為 "start"。    inline: "start"| "center"| "end", | "nearest"。默認(rèn)為 "nearest"。}
  • behavior表示滾動(dòng)方式。auto表示使用當(dāng)前元素的scroll-behavior樣式。instantsmooth表示直接滾到底使用平滑滾動(dòng)
  • block表示塊級(jí)元素排列方向要滾動(dòng)到的位置。對(duì)于默認(rèn)的writing-mode: horizontal-tb來(lái)說(shuō),就是豎直方向。start表示將視口的頂部和元素頂部對(duì)齊;center表示將視口的中間和元素的中間對(duì)齊;end表示將視口的底部和元素底部對(duì)齊;nearest表示就近對(duì)齊。
  • inline表示行內(nèi)元素排列方向要滾動(dòng)到的位置。對(duì)于默認(rèn)的writing-mode: horizontal-tb來(lái)說(shuō),就是水平方向。其值與block類似。

scrollIntoView 瀏覽器兼容性

最后我用的是 scrollIntoView, 問題完美解決。

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 稷山县| 仙桃市| 漳浦县| 娱乐| 金堂县| 澜沧| 会同县| 弋阳县| 屯留县| 林西县| 新营市| 当阳市| 镇巴县| 澄城县| 兴业县| 色达县| 黄陵县| 宝山区| 娄烦县| 石屏县| 昌宁县| 上饶县| 嘉定区| 凉城县| 浦北县| 孟津县| 澜沧| 隆化县| 确山县| 林芝县| 新河县| 东阿县| 本溪市| 宝山区| 曲麻莱县| 五莲县| 三门峡市| 天津市| 菏泽市| 漳平市| 新丰县|