vue跨页面跳转到相应锚点处

vue跨页面跳转到相应锚点处

路由

{
  path: '/product/tutorlals',
  name: 'Products_tutorlals',
  component: Products_tutorlals
},

product页面

<router-link :to="{name:'Products_tutorlals',query: {maodian:'tutorials'+item.id}}">
    <div class="moretutorials">
        More Tutorials >
    </div>
</router-link>

product_tutorlals页面

<ul class="Tutorial cl">
    <li class="Tutorialli" :id="'tutorials'+item.id" :ref="'tutorials'+item.id" v-for="(item, index) in tutoriallist" :key="item.id">
        <div class="Tutorialleft">
            <img :src="item.cover.indexOf('http')==-1?imageurl+item.cover:item.cover" alt="" class="img">
        </div>
        <div class="Tutorialright">
            <div class="name">
                {{item.name}}
            </div>
            <ul class="details">
                <li class="detailsli cl" v-for="(item, index) in item.video" :key="item.id">
                    <router-link :to="{name:'Products_video_detail',params: {id:item.id}}">
                        <div>
                            <div class="qiu">

                            </div>
                            <div class="detailstext">
                                {{item.title}}
                            </div>
                        </div>
                    </router-link>
                </li>
            </ul>
        </div>
    </li>
</ul>

product_tutorlals内引入common.js文件

import { goAnchor, GetQueryString } from "@/js/common";

product_tutorlals页面内的方法

//用updated(更新完成)这个钩子函数是为了页面完全加载之后找到含有锚点的id
updated: function() {
    let maodian = this.GetQueryString("maodian"); //进入页面,如果带有锚点参数,则跳转至锚点地方,参数值就是id名
    this.$nextTick(() => {
        if (maodian) {
            this.goAnchor(maodian);
        }
    });
},
methods: {
    initData() {
        tutorialmorerequest().then(res => {
            if ((res.code = 100000)) {
                this.tutoriallist = res.data.data;
            }
        });
    },
    goAnchor,

    GetQueryString
},

product_tutorlals页面引入的common.js

//跳转到锚点

function  goAnchor(selector)  {
    console.info("selector1", selector)
    // var  anchor  =  this.$el.querySelector(selector);//获取元素
    var  anchor  =  this.$refs[selector][0];//获取元素
    console.info("anchor", anchor)
    console.log(this.$refs.rrrr,"333")
    if (anchor)  {
        setTimeout(() => {//页面没有渲染完成时是无法滚动的,因此设置延迟
            //anchor.scrollIntoView(); //js的内置方法,可滚动视图位置至元素位置 
            var  targetOffset = $("#"+selector).offset().top;
            console.info("targetOffset", anchor, targetOffset)
            $('html,body').animate({
                scrollTop:  targetOffset
            },
                1000);
        }, 500);
    }
};

//获取参数

function  GetQueryString(name) {

    //var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");

    var  href  =  window.location.href;

    var  r  =  getSearchString(name, href);

    if  (r  !=  null)  return  decodeURI(r);

    return  null;

}

function  getSearchString(key,  Url)  {

    var  str  =  Url;

    str  =  str.substring(1,  str.length);

    if (str.indexOf("?") != -1) {

        var  arr  =  str.split("?")[1].split("&");// 获取?后的参数内容,并以&分隔字符串,获得类似name=xiaoli这样的元素数组

        var  obj  =  new  Object();

        // 将每一个数组元素以=分隔并赋给obj对象

        for  (var  i  =  0;  i  <  arr.length;  i++)  {

            var  tmp_arr  =  arr[i].split("=");

            obj[decodeURIComponent(tmp_arr[0])]  =  decodeURIComponent(tmp_arr[1]);

        }

        return  obj[key];

    }

}

export  {

    goAnchor,

    GetQueryString

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值