问题形容
需要:页面有列表项,以及列表明细项,点击列表某一项,滚动到对应列表明细项。对于这样需要,除了应用DOM.scrollTop以外,也能够应用锚点搭配DOM.scrollIntoView办法去实现,对于api概念定义,这里不赘述。详情看官网文档:
scrollTop:
https://developer.mozilla.org...
scrollIntoView:
https://developer.mozilla.org...留神:锚点并不是非得搭配a标签应用哦,别的标签也能够的
效果图
实例代码
<template> <div ref="toTopRef" class="box"> <div class="anchorsWrap"> <h3 @click="toTop">回到顶部</h3> <br /> <h3 @click="anchorJump('xiyouji')">跳转到西游记</h3> <br /> <h3 @click="anchorJump('shuihuzhuan')">跳转到水浒传</h3> <br /> <h3 @click="anchorJump('hongloumeng')">跳转到红楼梦</h3> <br /> </div> <div class="contentWrap"> <div> <p>锚点跳转</p> <p>很不错哦</p> <p>举荐应用</p> <p>某些场景</p> <p>比scrollTop</p> <p>更加不便</p> </div> <div> <!-- 来一个锚点id --> <h3 id="xiyouji">西游记</h3> <p>孙悟空</p> <p>猪八戒</p> <p>沙和尚</p> <p>唐僧</p> <p>孙悟空</p> <p>猪八戒</p> <p>沙和尚</p> <p>唐僧</p> <p>孙悟空</p> <p>猪八戒</p> <p>沙和尚</p> <p>唐僧</p> <p>唐僧</p> <p>孙悟空</p> <p>猪八戒</p> <p>沙和尚</p> <p>唐僧</p> </div> <div> <!-- 来一个锚点id --> <h3 id="shuihuzhuan">水浒传</h3> <p>李逵</p> <p>吴用</p> <p>林冲</p> <p>武松</p> <p>李逵</p> <p>吴用</p> <p>林冲</p> <p>武松</p> <p>李逵</p> <p>吴用</p> <p>林冲</p> <p>武松</p> <p>李逵</p> <p>吴用</p> <p>林冲</p> <p>武松</p> </div> <div> <!-- 来一个锚点id --> <h3 id="hongloumeng">红楼梦</h3> <p>贾宝玉</p> <p>林黛玉</p> <p>王熙凤</p> <p>贾宝玉</p> <p>林黛玉</p> <p>王熙凤</p> <p>贾宝玉</p> <p>林黛玉</p> <p>王熙凤</p> <p>贾宝玉</p> <p>林黛玉</p> <p>王熙凤</p> <p>贾宝玉</p> <p>林黛玉</p> <p>王熙凤</p> <p>贾宝玉</p> <p>林黛玉</p> <p>王熙凤</p> <p>贾宝玉</p> <p>林黛玉</p> <p>王熙凤</p> <p>贾宝玉</p> <p>林黛玉</p> <p>王熙凤</p> <p>贾宝玉</p> <p>林黛玉</p> <p>王熙凤</p> <p>贾宝玉</p> <p>林黛玉</p> <p>王熙凤</p> <p>贾宝玉</p> <p>林黛玉</p> <p>王熙凤</p> <p>贾宝玉</p> <p>林黛玉</p> <p>王熙凤</p> </div> </div> </div></template><script>export default { methods: { anchorJump(which) { let id = "#" + which; // 给id加上井号 // 给对应dom滚动到对应锚点,使之呈现在视图中 document.querySelector(id).scrollIntoView({ behavior: "smooth", // 定义过渡动画 instant立即跳过去 smooth平滑过渡过来 block: "start", // 定义垂直滚动方向的对齐 start顶部(尽可能) center两头(尽可能) end(底部) inline: "center", // 定义程度滚动方向的对齐 }); }, toTop() { if (this.$refs.toTopRef.scrollTop == 0) { return; } /** * 应用循环定时器,定时更新其高度,直至高度为0,才去革除定时器 * 同时再更正一下高度地位为0 * */ let timer = setInterval(() => { this.$refs.toTopRef.scrollTop = this.$refs.toTopRef.scrollTop - 30; console.log("实时高度scrollTop", this.$refs.toTopRef.scrollTop); if (this.$refs.toTopRef.scrollTop <= 0) { clearInterval(timer); this.$refs.toTopRef.scrollTop = 0; } }, 16); // 30和16这两个参数感觉比拟平滑一些 }, },};</script><style lang="less" scoped>.box { width: 100%; height: 100%; box-sizing: border-box; padding: 24px; // 作为容器,要开启滚动条 overflow-y: auto; .anchorsWrap { position: fixed; left: 480px; h3 { cursor: pointer; } h3:hover { box-shadow: 0 4px 12px 0 rgba(0, 0, 0, 0.15); } }}</style>
好忘性不如烂笔头,记录一下吧^_^