<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
類似這種,當也頁面左側內容捲動的時候,需要關聯啟用左側導航節點;當點選右側導航節點時, 也會將左側對應的內容捲動到可視區域頂部的場景,並不少見,比如知識類社群,掘金檢視文章時,百度檢視百科詞條時,都有這種場景,而我的實際開發種也遇到此類需求。遂有此文。
1.scrollIntoView() 的作用:
scrollIntoView()方法會捲動元素的父容器,使被呼叫scrollIntoView()的元素對使用者可見。
2.基本用法介紹:
var el = document.getElementById("p1"); // true 可以省略效果相同 el.scrollIntoView(true) // alignToTop:Boolean型引數。 // 如果為 true,元素的頂端將和其所在捲動區的可視區域的頂端對齊。 // 如果為 false,元素的底端將和其所在捲動區的可視區域的底端對齊。 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.注意事項
普通的佈局沒問題,但是要注意,取決於其它元素的佈局情況,此元素可能不會完全捲動到頂端或底端。比如整體上已經到頂部了,無法再捲動,那麼該元素就不會移動到可視區的頂部。
Element.getBoundingClientRect() 方法返回元素的大小及其相對於視口的位置。返回值是一個 DOMRect 物件,這個物件是由該元素的 getClientRects() 方法返回的一組矩形的集合,就是該元素的 CSS 邊框大小。返回的結果是包含完整元素的最小矩形,並且擁有left, 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。
// 從內容資料list中,獲取段落標題作為導航標題。併為導航節點增加href,以段落的id值作為href的值 this.list.map((item, i) => { this.activities.push({title: item.title, act: false, href: "#p" + i}); });
// 監聽卷軸 window.addEventListener("scroll", function (e) { // 防抖動處理 clearTimeout(that.timeout) this.timeout = setTimeout(() => { that.activeNavNode(e) }, 100) });
// dom中定位導航 navToPosition(item, index) { // 啟用相應的導航節點,變色 this.active = index; // 根據導航節點的href資訊即id資訊,獲取對應的元素節點,通過 scrollIntoView 捲動該元素到可視區頂部 document.querySelector(item.href).scrollIntoView(true); },
// 啟用左側對應的導覽列 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] 之間,設定啟用該元素對應左側的導航標題,這個數位可以按需定義 // 這裡關聯內容和導航標籤,是巧妙利用了內容在元素集合中的索引序號和導航標籤中的一致 // 即是 list 和 activities 和 nodes 中下標相等的元素,具有對應關聯的關係 if (nodeY <= 200 && nodeY >= 0) { this.active = Number(i) return } } },
到此這篇關於JavaScript實現內容捲動與導航標籤互動關聯方案的文章就介紹到這了,更多相關JS內容捲動 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45