vue3锚点定位两种实现方式示例

 更新时间:2023年07月12日 11:43:05   作者:Peach_Eiton  
这篇文章主要给大家介绍了关于vue3锚点定位两种实现的相关资料,说到锚点定位,很多人第一时间会想到 a标签,但是a标签实现的锚点定位并不是那么的完美,需要的朋友可以参考下

方法1: 利用ref实现锚点定位 前面的废话文学

说到锚点定位,很多人第一时间会想到 a标签。但是a标签实现的锚点定位并不是那么的完美,特别是在hash模式下。
对我而言,vue3的ref就实在是太完美了。

解决问题的方法

很多情况下,我们会循环一定格式的数据对页面进行渲染,然后再有锚点定位的需求。那么我们该怎么去做呢?

1. setup函数内定义变量

const eleRefs = ref([]);
const setRef = (el) => {
  if (el) {
    eleRefs.value.push(el);
  }
};
//获取变量值
console.log(eleRefs.value[0])

2. 动态获取ref并存放到eleRefs数组当中

 <template v-for="(item, index) in data.catalogue">
      <div class="part-cont" :id="'part' + item.id" :ref="setRef">
        <div class="part-box">
          <template v-for="(j, k) in item.picUrls" :key="k">
            <img :src="j" alt="">
          </template>
        </div>
        <template v-for="(i, ind) in item.children">
          <div :id="'part' + i.id" :ref="setRef" class="part-box">
            <template v-for="(j, k) in i.picUrls" :key="k">
              <img :src="j" alt="">
            </template>
          </div>
        </template>
      </div>
    </template>

3. 滚动到特定的ref位置

eleRefs.value[0].scrollIntoView({ block: 'start', behavior: 'smooth' });

over

方法2: 利用a标签实现锚点定位(滚动响应)

第二次的废话文学

小编想了,还是想把a标签的锚点定位也记录一下。

无论是PC端、移动端,还是APP、小程序,只要涉及长篇文章/画册、tab切换等的都可能会有锚点定位的需求。我们前端就需要做到点击锚点能定位,滚动页面能响应。

解决问题的方法

1. a标签 定位到指定位置

// 锚记
	<a href="#site" rel="external nofollow" >点击此处到目标位置</a>
// 锚记位置
	<div id="site"></div>

2.滚动响应

监听滚动事件

let currSite = document.documentElement.scrollTop || document.body.scrollTop // document.documentElement.scrollTop  // 当前滚动位置
let windowHeight =window.innerHeight||document.documentElement.clientHeight || document.body.clientHeight  // 视口高度
 // 获取元素信息
 let ele = document.getElementById('site')
 let eleTop = ele.offsetTop // 元素距页面顶部高度(头部)
 let eleHeight = ele.clientHeight  // 元素高度
  let eleBot = eleHeight + eleTop  // 元素底部距页面顶部高度(尾部)
/* 判断元素是否在可视区域:
	1.元素内嵌可视区域(首尾均在可视区域内)
	2.元素外嵌可视区域(首位均在可视区域外)
	3.元素头部在可视区域内,尾部在可视区域外
*/
if(eleTop >= currSite &&eleTop < currSite + windowHeight || (eleBot  > currSite &&eleBot < currSite + windowHeight) || (eleTop e < currSite && eleBot > currSite + windowHeight)){
	 // 元素在可视区域
}else{
	// 元素不在可视区域
}

over

总结

到此这篇关于vue3锚点定位两种实现方式的文章就介绍到这了,更多相关vue3锚点定位内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • VUE使用DXFParser组件解析dxf文件生成图片的操作代码

    VUE使用DXFParser组件解析dxf文件生成图片的操作代码

    这篇文章主要介绍了VUE使用DXFParser组件解析dxf文件生成图片的操作代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • 基于vue2实现一个日历组件

    基于vue2实现一个日历组件

    最近在做一个类似课程表的需求,需要自制一个日历来支持功能及展现,就顺便研究一下应该怎么开发日历组件,下面这篇文章主要给大家介绍了关于如何基于vue2实现一个日历组件的相关资料,需要的朋友可以参考下
    2022-12-12
  • Vue过滤器(filter)实现及应用场景详解

    Vue过滤器(filter)实现及应用场景详解

    在Vue中使用过滤器(Filters)来渲染数据是一种很有趣的方式,下面这篇文章主要给大家介绍了关于Vue过滤器(filter)实现及应用场景的相关资料,需要的朋友可以参考下
    2021-06-06
  • 解决antd datepicker 获取时间默认少8个小时的问题

    解决antd datepicker 获取时间默认少8个小时的问题

    这篇文章主要介绍了解决antd datepicker 获取时间默认少8个小时的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • 如何解决vue-json-editor无法输入中文、重影问题

    如何解决vue-json-editor无法输入中文、重影问题

    文章介绍了如何解决vue-json-editor组件无法输入中文和重影的问题,通过修改源码并使用vue-json-edit-fix-cn组件来 fix 这两个问题,同时,文章还提供了如何移除旧的依赖包并安装新的依赖包的步骤
    2025-01-01
  • vue增加强缓存和版本号的实现方法

    vue增加强缓存和版本号的实现方法

    这篇文章主要介绍了vue增加强缓存和版本号的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • vue中ref引用操作DOM元素的实现

    vue中ref引用操作DOM元素的实现

    本文主要介绍了vue中ref引用操作DOM元素的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • vue中正确使用jsx语法的姿势分享

    vue中正确使用jsx语法的姿势分享

    这篇文章主要给大家介绍了关于vue中正确使用jsx的相关资料,JSX就是Javascript和XML结合的一种格式,React发明了JSX,利用HTML语法来创建虚拟DOM,当遇到<,JSX就当HTML解析,遇到{就当JavaScript解析,需要的朋友可以参考下
    2021-07-07
  • Vue使用el-input自动获取焦点和二次获取焦点问题及解决

    Vue使用el-input自动获取焦点和二次获取焦点问题及解决

    这篇文章主要介绍了Vue使用el-input自动获取焦点和二次获取焦点问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Vue中保存数据到磁盘文件的方法

    Vue中保存数据到磁盘文件的方法

    今天小编就为大家分享一篇Vue中保存数据到磁盘文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09

最新评论