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

JavaScript實(shí)現(xiàn)內(nèi)容滾動與導(dǎo)航標(biāo)簽互動關(guān)聯(lián)方案

 更新時間:2022年06月07日 10:01:22   作者:? 靈扁扁?  ?  
這篇文章主要介紹了JavaScript實(shí)現(xiàn)內(nèi)容滾動與導(dǎo)航標(biāo)簽互動關(guān)聯(lián)方案,主要根據(jù)滾動左側(cè)內(nèi)容,關(guān)聯(lián)激活右側(cè)導(dǎo)航節(jié)點(diǎn)展開相應(yīng)介紹,需要的小伙伴可以參考一下

一、需求場景描述

1.先看演示效果

類似這種,當(dāng)也頁面左側(cè)內(nèi)容滾動的時候,需要關(guān)聯(lián)激活左側(cè)導(dǎo)航節(jié)點(diǎn);當(dāng)點(diǎn)擊右側(cè)導(dǎo)航節(jié)點(diǎn)時, 也會將左側(cè)對應(yīng)的內(nèi)容滾動到可視區(qū)域頂部的場景,并不少見,比如知識類社區(qū),掘金查看文章時,百度查看百科詞條時,都有這種場景,而我的實(shí)際開發(fā)種也遇到此類需求。遂有此文。

2.需求分解

  • 1.滾動左側(cè)內(nèi)容,關(guān)聯(lián)激活右側(cè)導(dǎo)航節(jié)點(diǎn)
  • 2.單擊右側(cè)導(dǎo)航節(jié)點(diǎn),右側(cè)相應(yīng)的段落滾動到可視區(qū)頂部

二、關(guān)鍵技術(shù)點(diǎn)提前知

技術(shù)點(diǎn)1:Element.scrollIntoView()

1.scrollIntoView() 的作用

scrollIntoView()方法會滾動元素的父容器,使被調(diào)用scrollIntoView()的元素對用戶可見。

2.基本用法介紹:

var el = document.getElementById("p1");
// true 可以省略效果相同
el.scrollIntoView(true)

// alignToTop:Boolean型參數(shù)。
// 如果為 true,元素的頂端將和其所在滾動區(qū)的可視區(qū)域的頂端對齊。
// 如果為 false,元素的底端將和其所在滾動區(qū)的可視區(qū)域的底端對齊。
el.scrollIntoView(false);

// 可選,scrollIntoViewOptions:{behavior: "smooth", block: "end", inline: "nearest"}
// 可選,behavior :定義動畫過渡效果,"auto"或 "smooth" 之一。默認(rèn)為 "auto"。
// 可選,block:定義垂直方向的對齊,"start", "center", "end", 或 "nearest"之一。默認(rèn)為 "start"。
// 可選,inline:定義水平方向的對齊,"start", "center", "end", 或 "nearest"之一。默認(rèn)為 "nearest"。
el.scrollIntoView({behavior: "smooth", block: "end", inline: "nearest"});
el.scrollIntoView({block: "end"});

3.注意事項(xiàng)

普通的布局沒問題,但是要注意,取決于其它元素的布局情況,此元素可能不會完全滾動到頂端或底端。比如整體上已經(jīng)到頂部了,無法再滾動,那么該元素就不會移動到可視區(qū)的頂部。

技術(shù)點(diǎn)2:Element.getBoundingClientRect()

Element.getBoundingClientRect() 方法返回元素的大小及其相對于視口的位置。返回值是一個 DOMRect 對象,這個對象是由該元素的 getClientRects() 方法返回的一組矩形的集合,就是該元素的 CSS 邊框大小。返回的結(jié)果是包含完整元素的最小矩形,并且擁有l(wèi)eft, top, right, bottom, x, y, width, 和 height這幾個以像素為單位的只讀屬性用于描述整個邊框。除了width 和 height 以外的屬性是相對于視圖窗口的左上角來計算的。

下面是它的打印信息示例:

console.dir(document.getElementById("p1").getBoundingClientRect())

如果是標(biāo)準(zhǔn)盒子模型,元素的尺寸等于width/height + padding + border-width的總和。如果box-sizing: border-box,元素的的尺寸等于 width/height。

三、實(shí)現(xiàn)思路分析

1.數(shù)據(jù)初始化處理

// 從內(nèi)容數(shù)據(jù)list中,獲取段落標(biāo)題作為導(dǎo)航標(biāo)題。并為導(dǎo)航節(jié)點(diǎn)增加href,以段落的id值作為href的值
this.list.map((item, i) => {
  this.activities.push({title: item.title, act: false, href: "#p" + i});
});

2.監(jiān)聽滾動條,以便滾動內(nèi)容時,關(guān)聯(lián)激活右側(cè)導(dǎo)航標(biāo)簽

// 監(jiān)聽滾動條
window.addEventListener("scroll", function (e) {
  // 防抖動處理
  clearTimeout(that.timeout)
  this.timeout = setTimeout(() => {
    that.activeNavNode(e)
  }, 100)
});

3.實(shí)現(xiàn)點(diǎn)擊右側(cè)導(dǎo)航節(jié)點(diǎn),關(guān)聯(lián)左側(cè)內(nèi)容滾動到可視區(qū)頂部

// dom中定位導(dǎo)航
navToPosition(item, index) {
  // 激活相應(yīng)的導(dǎo)航節(jié)點(diǎn),變色
  this.active = index;
  // 根據(jù)導(dǎo)航節(jié)點(diǎn)的href信息即id信息,獲取對應(yīng)的元素節(jié)點(diǎn),通過 scrollIntoView 滾動該元素到可視區(qū)頂部
  document.querySelector(item.href).scrollIntoView(true);
},

4.實(shí)現(xiàn)滾動右側(cè)內(nèi)容,關(guān)聯(lián)激活左側(cè)導(dǎo)航節(jié)點(diǎn)

// 激活左側(cè)對應(yīng)的導(dǎo)航條
activeNavNode(e) {
  const nodes = document.getElementsByTagName("section")
  for (let i = 0; i < nodes.length; i++) {
    let node = nodes[i];
    // 獲取該元素此時相對于視口的頂部的距離,即是元素頂部距離視口屏幕上邊的距離
    let nodeY = node.getBoundingClientRect().y
    // 當(dāng)元素距離視口頂部的距離在 [0,200] 之間,設(shè)置激活該元素對應(yīng)左側(cè)的導(dǎo)航標(biāo)題,這個數(shù)字可以按需定義
    // 這里關(guān)聯(lián)內(nèi)容和導(dǎo)航標(biāo)簽,是巧妙利用了內(nèi)容在元素集合中的索引序號和導(dǎo)航標(biāo)簽中的一致
    // 即是 list 和 activities 和 nodes 中下標(biāo)相等的元素,具有對應(yīng)關(guān)聯(lián)的關(guān)系
    if (nodeY <= 200 && nodeY >= 0) {
      this.active = Number(i)
      return
    }
  }
},

四、完整 demo 示例代碼

到此這篇關(guān)于JavaScript實(shí)現(xiàn)內(nèi)容滾動與導(dǎo)航標(biāo)簽互動關(guān)聯(lián)方案的文章就介紹到這了,更多相關(guān)JS內(nèi)容滾動 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js提取中文拼音首字母的封裝工具類

    js提取中文拼音首字母的封裝工具類

    這篇文章主要給大家介紹了關(guān)于利用js實(shí)現(xiàn)的一個提取中文拼音首字母的封裝工具類,文中給出了詳細(xì)完整的示例代碼,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以直接拿來用,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • bootstrap select下拉搜索插件使用方法詳解

    bootstrap select下拉搜索插件使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了bootstrap select下拉搜索插件的使用方法,動態(tài)加載自己數(shù)據(jù)的二級聯(lián)動,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • JavaScript多線程詳解

    JavaScript多線程詳解

    雖然有越來越多的網(wǎng)站在應(yīng)用AJAX技術(shù)進(jìn)行開發(fā),但是構(gòu)建一個復(fù)雜的AJAX應(yīng)用仍然是一個難題。接下來小編給大家介紹JavaScript多線程,需要的朋友可以參考下
    2015-08-08
  • js中的面向?qū)ο笾畬ο蟪R妱?chuàng)建方法詳解

    js中的面向?qū)ο笾畬ο蟪R妱?chuàng)建方法詳解

    這篇文章主要介紹了js中的面向?qū)ο笾畬ο蟪R妱?chuàng)建方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了JavaScript創(chuàng)建對象的四種常用方式,需要的朋友可以參考下
    2019-12-12
  • javascript笛卡爾積算法實(shí)現(xiàn)方法

    javascript笛卡爾積算法實(shí)現(xiàn)方法

    這篇文章主要介紹了javascript笛卡爾積算法實(shí)現(xiàn)方法,實(shí)例分析了笛卡爾積算法的javascript實(shí)現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • 公共js在頁面底部加載的注意事項(xiàng)介紹

    公共js在頁面底部加載的注意事項(xiàng)介紹

    JavaScript腳本文件都放在頁面底部加載,可以有效地加快頁面的加載速度,下面為大家介紹下書寫時的注意事項(xiàng)
    2013-07-07
  • js實(shí)現(xiàn)鼠標(biāo)懸停圖片上時滾動文字說明的方法

    js實(shí)現(xiàn)鼠標(biāo)懸停圖片上時滾動文字說明的方法

    這篇文章主要介紹了js實(shí)現(xiàn)鼠標(biāo)懸停圖片上時滾動文字說明的方法,涉及js操作鼠標(biāo)事件的使用技巧,需要的朋友可以參考下
    2015-02-02
  • js獲取UserControl內(nèi)容為拼html時提供方便

    js獲取UserControl內(nèi)容為拼html時提供方便

    js獲取UserControl內(nèi)容時無法測試通過,原來是繼承了Page 然后使用VerifyRenderingInServerForm驗(yàn)證
    2014-11-11
  • Javascript異步流程控制之串行執(zhí)行詳解

    Javascript異步流程控制之串行執(zhí)行詳解

    這篇文章主要給大家介紹了關(guān)于Javascript異步流程控制之串行執(zhí)行的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • javascript使用正則表達(dá)式實(shí)現(xiàn)去掉空格之后的字符

    javascript使用正則表達(dá)式實(shí)現(xiàn)去掉空格之后的字符

    這篇文章主要介紹了javascript使用正則表達(dá)式實(shí)現(xiàn)去掉空格之后的字符的方法,需要的朋友可以參考下
    2015-02-02

最新評論

莫力| 新建县| 阳信县| 宜兰市| 安宁市| 靖边县| 卢氏县| 安福县| 凌云县| 湖口县| 苏尼特右旗| 九龙坡区| 常熟市| 中宁县| 麻城市| 宜兰县| 舒城县| 怀柔区| 靖江市| 高尔夫| 北安市| 东至县| 武安市| 乌拉特前旗| 平罗县| 家居| 利辛县| 松阳县| 栾川县| 揭东县| 天峨县| 梁平县| 舟山市| 华亭县| 宁强县| 庄浪县| 界首市| 镇雄县| 南丹县| 青铜峡市| 涪陵区|