vue鼠标点击和滑动锚点

效果

在这里插入图片描述

<ul class="list">
  <li
    class="item"
    v-for="item in letters"
    :key="item"
    :ref="item"
    @click="handleLetterClick"
    @touchstart.prevent="handleTouchStart"
    @touchmove="handleTouchMove"
    @touchend="handleTouchEnd"
  >
    {{ item }}
  </li>
</ul>
	// 点击锚点
	handleLetterClick(e) {
      this.$emit("change", e.target.innerText); // A B C D
    },
    // 滑动锚点
    handleTouchStart() {
      this.touchStatus = true;
    },
    handleTouchMove(e) {
      // 思路就是获取A到顶部的高度,滑到B的时候让B的高度减去A 的高度就知道那个字母
      if (this.touchStatus) {
        // 当上下可以拖动的时候
        if (this.timer) {
          clearTimeout(this.timer);
        }
        this.timer = setTimeout(() => {
          // 正在滑动的字母到顶部的距离减去头部的距离
          const touchY = e.touches[0].clientY - 79;
          // A字母到顶部的距离 浅蓝色下沿
          const startY = this.$refs["A"][0].offsetTop // 207
          // 移动中距离顶部的高度的减去第一个到顶部的高度 / 每个字母的高度
          const index = Math.floor((touchY - startY) / 20);
          if (index >= 0 && index < this.letters.length) {
            this.$emit("change", this.letters[index]); // A B C D
          }
        }, 8);
      }
    },
    handleTouchEnd() {
      this.touchStatus = false;
    },

	// 列表组件
	// 模板需要动态的绑定ref 为A B C D即可
	watch: {
	    letter() {
	      if (this.letter) {
	        const element = this.$refs[this.letter][0];
	        // 进行滚动
	        this.scroll.scrollToElement(element, 500);
	      }
	    },
	  },
### 实现Vue页面滚轮滑动效果 为了实现在 Vue 页面中鼠标滚轮滚动时的平滑过渡或自定义动画效果,通常会结合 JavaScript 的 `wheel` 事件以及 CSS 动画来完成。下面介绍一种方法: #### 使用 `wheel` 事件监听器 在 Vue 组件内部注册一个 `wheel` 事件监听器,用于捕捉用户的滚动操作,并根据需求调整页面内容的位置。 ```javascript export default { mounted() { window.addEventListener('wheel', this.handleScroll); }, methods: { handleScroll(event) { event.preventDefault(); const delta = event.deltaY; if (delta > 0) { // 向下滚动 document.documentElement.scrollTop += Math.abs(delta * 0.5); // 调整速度因子 } else { // 向上滚动 document.documentElement.scrollTop -= Math.abs(delta * 0.5); } } }, beforeDestroy() { window.removeEventListener('wheel', this.handleScroll); } } ``` 此代码片段展示了如何捕获鼠标的滚动行为并控制其移动距离[^1]。 #### 利用 CSS 进行平滑滚动 为了让用户体验更加流畅,在样式表里加入如下属性可以使整个文档支持平滑滚动功能: ```css html { scroll-behavior: smooth; } ``` 这将使得所有的链接跳转都变得顺滑自然[^2]。 另外还可以利用第三方插件如 vue-awesome-swiper 或者自己编写更复杂的交互逻辑以满足特定场景下的需求。 对于希望创建更为精细定制化的滚动体验,则可能涉及到更多的计算工作量,比如基于时间轴的缓动函数、惯性模拟等高级特性。 #### 结合虚拟 DOM 提升效率 考虑到频繁触发的滚动事件可能会带来一定的性能开销,可以考虑借助于虚拟 DOM 技术优化渲染过程,确保即使是在高频率更新的情况下也能保持良好的响应速度视觉质量[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值