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

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

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

一、需求場景描述

1.先看演示效果

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

2.需求分解

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

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

技術(shù)點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" 之一。默認為 "auto"。
// 可選,block:定義垂直方向的對齊,"start", "center", "end", 或 "nearest"之一。默認為 "start"。
// 可選,inline:定義水平方向的對齊,"start", "center", "end", 或 "nearest"之一。默認為 "nearest"。
el.scrollIntoView({behavior: "smooth", block: "end", inline: "nearest"});
el.scrollIntoView({block: "end"});

3.注意事項

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

技術(shù)點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())

如果是標準盒子模型,元素的尺寸等于width/height + padding + border-width的總和。如果box-sizing: border-box,元素的的尺寸等于 width/height。

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

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

// 從內(nèi)容數(shù)據(jù)list中,獲取段落標題作為導航標題。并為導航節(jié)點增加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è)導航標簽

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

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

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

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

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

四、完整 demo 示例代碼

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

相關(guān)文章

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

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

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

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

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

    JavaScript多線程詳解

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

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

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

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

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

    公共js在頁面底部加載的注意事項介紹

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

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

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

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

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

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

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

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

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

最新評論

通州市| 柘城县| 南开区| 井陉县| 闽清县| 茌平县| 乡城县| 涪陵区| 公安县| 类乌齐县| 伊吾县| 阿拉尔市| 新竹市| 屏山县| 榆中县| 株洲县| 小金县| 修水县| 桐柏县| 穆棱市| 舒兰市| 桃园市| 英山县| 镇平县| 满洲里市| 陵川县| 夏河县| 临武县| 浑源县| 贵阳市| 乌兰浩特市| 肇州县| 大同县| 定结县| 和龙市| 峨山| 延川县| 上饶县| 福泉市| 巨鹿县| 祁门县|