您的位置:首页技术文章
文章详情页

vue实现锚点跳转scrollIntoView()使用案例

【字号: 日期:2022-06-12 18:56:23浏览:2作者:猪猪
目录vue实现锚点跳转:scrollIntoView()说明:使用案例:vue锚点跳转的三种方式(页内跳转,跨页跳转,函数跳转)1.需求2.跳转锚点的基本方式2.1 页面内通过点击来跳转2.2 从A页面跳转到B页面的指定锚点(锚点就在页面上,不在子组件中)2.3 直接使用代码进行锚点跳转vue实现锚点跳转:scrollIntoView()说明:

滚动到某个特定元素 :scrollIntoView();例如form表单或者div滚动到底部,

document.getElementsByClassName(‘’)或者document.getElementsById(‘’)

获取到元素后即可实现回到可视化区域(也可理解为回到顶部)。

使用案例:<div> v-for='(value,index) in data' class='roll'>{{...}}</div>

js部分

methods:{ scrollToPosition(index){ document.getElementsByClassName('roll')[index].scrollIntoView()}

这样就利用scrollIntoView()简单实现了一个锚点跳转,下边讲解scrollIntoView中的一些属性:

scrollIntoView(true)相等于scrollIntoView();元素的顶端将和其所在滚动区的可视区域的顶端对齐为true时相应的 scrollIntoViewOptions: {block: “start”, inline:“nearest”}。这是这个参数的默认值。

scrollIntoView(false)元素的底端将和其所在滚动区的可视区域的底端对齐为false时相应的scrollIntoViewOptions: {block: “end”, inline: “nearest”}。

同时他的参数也可以配置成一个object对象

scrollIntoView({ behavior:auto //定义动画过渡效果'auto'或 'smooth' 之一。默认为 'auto'。 block:start//定义垂直方向的对齐, 'start', 'center', 'end', 或 'nearest'之一。默认为 'start'。 inline:nearest//'start', 'center', 'end', 或 'nearest'之一。默认为 'nearest'。 })

其中smooth是平滑滚动 start和end是目标滚动到的位置

注意:兼容性的问题多数主流浏览器已经支持其基本功能,也就是说,使用true,false两个参数,来实现木讷的定位(没有滚动动画)是没有任何问题的,但是传入object参数时,IE各种版本会直接忽略,全部看成true参数属性,如果想看到滚动动画,使用火狐和chrome。

vue锚点跳转的三种方式(页内跳转,跨页跳转,函数跳转)1.需求

最近遇到一个需求,需要从一个页面跳到另一个页面的指定锚点,如果是页面上的锚点还简单,但是那个锚点在页面的组件里面。所以稍微研究了一下

2.跳转锚点的基本方式2.1 页面内通过点击来跳转

即添加一个a标签,href以#开头,然后在需要跳转的地方添加一个element,id设置为a标签href属性相同的值,只是不要#,就可以了,这是最简单的方式

<a href='https://www.jb51.net/javascript/291910vkt.htm#miao'>去找喵星人</a><h3 id='miao'>喵星人基地</h3>2.2 从A页面跳转到B页面的指定锚点(锚点就在页面上,不在子组件中)

我用的vue,所以在vue路由跳转时只要在path后面加上#锚点就可以了,比如我要跳到B页面id为miao的锚点,那么path=xxxx?#miao,当遇到query参数的情况,将#miao放到url的最后就行了,其他的也一样,反正只要把锚点放在url最后就行了,然后进行跳转即可

 this.$router.push({            path: `/detail?#miao`,            query: {              comment: `${commentId}`            }          })

注意:因为默认的vue单页使用的是hash模式,以#作为路由分割标识符,就会导致有歧义而无法正常达到需求,如果你又不想使用history模式,那么就使用2.3的方式,使用代码进行锚点跳转

2.3 直接使用代码进行锚点跳转

有的情况,只能使用代码进行锚点跳转,比如从一个页面跳到另一页面子组件内的指定锚点,这与2.2还是有区别的,我已经试过,如果锚点在子组件内,不在当前路由页面中,那么2.2的方式并不会起作用。解决方法:将锚点作为query属性,或者其他的方式,将锚点的值传给B页面,然后B页面再通过props的方式传给他的子组件,最后在子组件中使用代码进行锚点跳转

// 这是传到组件中的数据 props: {      commentId: String  }  mounted () {  // 判断commentId 是否有值,如果没有的话,就不进行跳转,我这里就用'null'来判断了,你们随意  // document.querySelector用来获取element,有个坑,id值不能全为数字,否则报错,所以我在id值前面加了id,id格式大致是:id123456  // scrollIntoView就是用来跳转到锚点的函数        if (this.commentId !== 'null') {          let inter = setInterval(() => {            let target = document.querySelector(`#id${this.commentId}`)            if (target) {              clearInterval(time)              target.scrollIntoView()            }          },100)        }    },

到此这篇关于vue实现锚点跳转 scrollIntoView()的文章就介绍到这了,更多相关vue锚点跳转 scrollIntoView()内容请搜索好吧啦网以前的文章或继续浏览下面的相关文章希望大家以后多多支持好吧啦网!

标签: JavaScript