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

}
Vue中实现页面跳转锚点有两种方法。第一种是非页面锚点跳转,可以在标签中使用JavaScript方法实现。例如,在组件A中,可以使用以下代码实现跳转到组件B的指定位置的锚点: ```html <div class="content"> <a href="javascript:void(0)" @click="goAnchor()">gotoOther</a> </div> ``` 然后,在组件A的methods中添加goAnchor方法: ```javascript methods: { goAnchor() { var anchor = this.$el.querySelector("#锚点的id或name值") document.body.scrollTop = anchor.offsetTop } } ``` 第二种方法是页面锚点跳转,可以使用路由来实现。在组件A中,可以使用以下代码实现跳转到组件B的指定位置的锚点: ```html <div class="content"> <a href="/b组件路由#锚点的id或name值">gotoOther</a> </div> ``` 需要注意的是,需要将跳转目标的路由锚点的id或name值组合在一起。 在组件B中,需要设置对应锚点位置。例如: ```html <div class="content-modal" id="c"> // 设置id ccc </div> <div class="content-modal" id="d"> // 设置id ddd </div> <div class="content-modal" id="e"> // 设置id eee </div> <div class="content-modal" id="f"> // 设置id fff </div> ``` 为了在组件B加载时自动滚动到指定的锚点位置,可以在mounted钩子函数中添加以下代码: ```javascript mounted() { if (window.location.hash) { this.goAnchor(window.location.hash) } }, methods: { goAnchor(selector) { setTimeout(() => { // 获取锚点元素 const anchor = this.$el.querySelector(selector) anchor.scrollIntoView() }, 500) } } ``` 这样,在组件B加载时,如果URL中包含锚点信息,页面会自动滚动到对应锚点位置。 请根据你的需求选择合适的方法来实现Vue页面跳转锚点。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [vue 实现页面锚点跳转](https://blog.csdn.net/yimaode/article/details/104649672)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [VUE页面锚点(nuxt同样适用)](https://blog.csdn.net/Poppy_LYT/article/details/119995904)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值