最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript實(shí)現(xiàn)平滑滾動(dòng)效果

 更新時(shí)間:2024年06月02日 14:10:15   作者:網(wǎng)絡(luò)點(diǎn)點(diǎn)滴  
頁面平滑滾動(dòng)是網(wǎng)頁一種常見的效果,平滑滾動(dòng)的原理其實(shí)很簡(jiǎn)單,無非就是讓頁面一種肉眼可見的速度從當(dāng)前位置滾動(dòng)到指定位置,那如何用原生的JS實(shí)現(xiàn)這也效果呢?本文給大家介紹了JavaScript實(shí)現(xiàn)平滑滾動(dòng)效果,需要的朋友可以參考下

● 本次我們將實(shí)現(xiàn)點(diǎn)擊按鈕時(shí)候,可以平滑得滾動(dòng)到指定位置

● 首先我們獲取到按鈕信息和想要滾動(dòng)到得章節(jié)

const btnScrollTo = document.querySelector('.btn--scroll-to');
const section1 = document.querySelector('#section--1');

● 下一步就是添加點(diǎn)擊事件了

btnScrollTo.addEventListener('click', function (e) {
  const slcoords = section1.getBoundingClientRect();
});

getBoundingClientRect()是一個(gè)JavaScript方法,用于獲取一個(gè)元素相對(duì)于視口的位置和尺寸。它返回一個(gè)DOMRect對(duì)象,包含了元素的top、right、bottom、left、width、height等屬性。

btnScrollTo.addEventListener('click', function (e) {
  const slcoords = section1.getBoundingClientRect();
  console.log(slcoords);
});

btnScrollTo.addEventListener('click', function (e) {
  const slcoords = section1.getBoundingClientRect();
  console.log(slcoords);

  console.log(e.target.getBoundingClientRect());
});

//通過調(diào)用e.target.getBoundingClientRect(),你可以獲取觸發(fā)點(diǎn)擊事件的元素相對(duì)于視口的位置和尺寸信息。

● 我們也可以獲得當(dāng)前滾動(dòng)位置的 X 軸和 Y 軸坐標(biāo)

const btnScrollTo = document.querySelector('.btn--scroll-to');
const section1 = document.querySelector('#section--1');

btnScrollTo.addEventListener('click', function (e) {
  const slcoords = section1.getBoundingClientRect();
  console.log(slcoords);

  console.log(e.target.getBoundingClientRect());

  console.log('Current scrll (X/Y)', window.scrollX, window.screenY);
});

● 我們也可以輸出輸出視口(viewport)的高度和寬度,也就是可見視口的高度

console.log(
    'height/width viewport',
    document.documentElement.clientHeight,
    document.documentElement.clientWidth
  );

● 現(xiàn)在就簡(jiǎn)單了,我們只需要點(diǎn)擊按鈕的時(shí)候更改一下我們想要的章節(jié)坐標(biāo)即可

const btnScrollTo = document.querySelector('.btn--scroll-to');
const section1 = document.querySelector('#section--1');

btnScrollTo.addEventListener('click', function (e) {
  const slcoords = section1.getBoundingClientRect();
  // console.log(slcoords);

  // console.log(e.target.getBoundingClientRect());

  // console.log('Current scrll (X/Y)', window.scrollX, window.screenY);

  // console.log(
  //   'height/width viewport',
  //   document.documentElement.clientHeight,
  //   document.documentElement.clientWidth
  // );

  window.scrollTo(slcoords.left, slcoords.top);
});

● 現(xiàn)在確實(shí)可以跳轉(zhuǎn)了,但是細(xì)心的小伙伴會(huì)發(fā)現(xiàn),這個(gè)必須在頂部才能正常跳轉(zhuǎn),往下面滑動(dòng)一點(diǎn)就不行了,因?yàn)轫撁婊瑒?dòng)就會(huì)章節(jié)的到頂部的X軸就會(huì)變動(dòng),我們必須加上滑動(dòng)的距離才可以

const btnScrollTo = document.querySelector('.btn--scroll-to');
const section1 = document.querySelector('#section--1');

btnScrollTo.addEventListener('click', function (e) {
  const slcoords = section1.getBoundingClientRect();
  // console.log(slcoords);

  // console.log(e.target.getBoundingClientRect());

  // console.log('Current scrll (X/Y)', window.scrollX, window.screenY);

  // console.log(
  //   'height/width viewport',
  //   document.documentElement.clientHeight,
  //   document.documentElement.clientWidth
  // );

  window.scrollTo(
    slcoords.left + window.scrollX,
    slcoords.top + window.scrollY
  );
});

● 現(xiàn)在在任何視口都可以跳轉(zhuǎn)了,但是跳轉(zhuǎn)有點(diǎn)生硬,我們要給他這是平滑滾動(dòng)

const btnScrollTo = document.querySelector('.btn--scroll-to');
const section1 = document.querySelector('#section--1');

btnScrollTo.addEventListener('click', function (e) {
  const slcoords = section1.getBoundingClientRect();
  // console.log(slcoords);

  // console.log(e.target.getBoundingClientRect());

  // console.log('Current scrll (X/Y)', window.scrollX, window.screenY);

  // console.log(
  //   'height/width viewport',
  //   document.documentElement.clientHeight,
  //   document.documentElement.clientWidth
  // );

  // window.scrollTo(
  //   slcoords.left + window.scrollX,
  //   slcoords.top + window.scrollY
  // );
  window.scrollTo({
    left: slcoords.left + window.scrollX,
    top: slcoords.top + window.scrollY,
    behavior: 'smooth',
  });
});

現(xiàn)在可以實(shí)現(xiàn)平滑滾動(dòng)了,但是上述的操作都是比較老的操作方法了,對(duì)于現(xiàn)代瀏覽器,我們有更加現(xiàn)代的方法去實(shí)現(xiàn)平滑滾動(dòng);

const btnScrollTo = document.querySelector('.btn--scroll-to');
const section1 = document.querySelector('#section--1');

btnScrollTo.addEventListener('click', function (e) {
  const slcoords = section1.getBoundingClientRect();
  section1.scrollIntoView({ behavior: 'smooth' });
});

這樣就可以更加現(xiàn)代化的實(shí)現(xiàn)平滑滾動(dòng)了,但是可能會(huì)存在老的瀏覽器不兼容的問題,但是現(xiàn)代化的實(shí)現(xiàn)方法的邏輯也是按照我們上面的步驟來執(zhí)行的!

以上就是JavaScript實(shí)現(xiàn)平滑滾動(dòng)效果的詳細(xì)內(nèi)容,更多關(guān)于JavaScript平滑滾動(dòng)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于AGS JS開發(fā)自定義貼圖圖層

    基于AGS JS開發(fā)自定義貼圖圖層

    這篇文章主要為大家詳細(xì)介紹了基于AGS JS開發(fā)自定義貼圖圖層的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 一文詳解JavaScript中如何阻止元素的默認(rèn)行為

    一文詳解JavaScript中如何阻止元素的默認(rèn)行為

    在網(wǎng)頁開發(fā)中,許多用戶操作會(huì)觸發(fā)瀏覽器的默認(rèn)行為,例如,當(dāng)用戶點(diǎn)擊一個(gè)超鏈接時(shí),瀏覽器會(huì)導(dǎo)航到鏈接的目標(biāo)頁面,為了提升用戶體驗(yàn)或控制頁面行為,我們通常需要阻止這些默認(rèn)行為,所以本文我們將探討如何在JavaScript中阻止元素的默認(rèn)行為,需要的朋友可以參考下
    2025-06-06
  • 純JS半透明Tip效果代碼

    純JS半透明Tip效果代碼

    自己根據(jù)網(wǎng)上提供的一個(gè)透明功能類庫寫的純JS半透明Tip效果
    2008-10-10
  • Chart.js與ECharts.js圖表使用過程組件對(duì)比

    Chart.js與ECharts.js圖表使用過程組件對(duì)比

    chartjs只能基于canvas,雖然只有英文文檔,但定制化程度更高,社區(qū)成熟,功能就更加穩(wěn)定,ECharts.js可以基于svg或者canvas去渲染,有融合主流前端框架的社區(qū)庫,另外ECharts.js還支持3d效果的圖表,相當(dāng)炫酷,國(guó)內(nèi)開發(fā)者大多數(shù)使用這個(gè),有中文文檔
    2023-10-10
  • webpack實(shí)踐之DLLPlugin 和 DLLReferencePlugin的使用教程

    webpack實(shí)踐之DLLPlugin 和 DLLReferencePlugin的使用教程

    這篇文章主要介紹了webpack實(shí)踐之DLLPlugin 和 DLLReferencePlugin的使用教程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-06-06
  • javascript 繪制矩形框

    javascript 繪制矩形框

    今天讀John Resig的Pro Javascript Techniques時(shí)候看到他書上給的一個(gè)關(guān)于drag and drop的例子,我做的第二件事就是js模擬用鼠標(biāo)拖出矩形框,代碼很簡(jiǎn)單
    2009-04-04
  • 一組JS創(chuàng)建和操作表格的函數(shù)集合

    一組JS創(chuàng)建和操作表格的函數(shù)集合

    在用AJAX的時(shí)候,經(jīng)常要用JS操作DOM,當(dāng)涉及到數(shù)據(jù)列表的時(shí)候,那用表格比較多,這里寫了組函數(shù)集合,專門用來操作表格,當(dāng)然,目前還有很多不足,但是對(duì)一些簡(jiǎn)單操作還是很方便的。
    2009-05-05
  • 淺談目前可以使用ES10的5個(gè)新特性

    淺談目前可以使用ES10的5個(gè)新特性

    這篇文章主要介紹了淺談目前可以使用ES10的5個(gè)新特性,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-06-06
  • javascript中call apply 的應(yīng)用場(chǎng)景

    javascript中call apply 的應(yīng)用場(chǎng)景

    call, apply都屬于Function.prototype的一個(gè)方法,它是JavaScript引擎內(nèi)在實(shí)現(xiàn)的,因?yàn)閷儆贔unction.prototype,所以每個(gè)Function對(duì)象實(shí)例,也就是每個(gè)方法都有call, apply屬性.
    2015-04-04
  • javascript設(shè)置連續(xù)兩次點(diǎn)擊按鈕時(shí)間間隔的方法

    javascript設(shè)置連續(xù)兩次點(diǎn)擊按鈕時(shí)間間隔的方法

    這篇文章主要介紹了javascript設(shè)置連續(xù)兩次點(diǎn)擊按鈕時(shí)間間隔的方法,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-10-10

最新評(píng)論

庆城县| 海兴县| 清涧县| 鹰潭市| 揭阳市| 威海市| 灵丘县| 彭水| 康乐县| 长春市| 宣化县| 舞钢市| 区。| 临泽县| 新余市| 罗定市| 昭觉县| 江山市| 沅江市| 青神县| 灵台县| 镇安县| 东宁县| 余干县| 德昌县| 乐山市| 张家界市| 上栗县| 通辽市| 阳城县| 三河市| 宣汉县| 会泽县| 赫章县| 上林县| 伊川县| 紫云| 仁布县| 许昌市| 舟曲县| 荣成市|