vue2项目中滚动的自动和停止

vue2项目中滚动的自动和停止

一、直接上代码

<div ref="chatScroll" class="leftReturn">
 里面好多的内容,这个有滚动条</div>

 container: null,
 isUserScrolling: false, //用户是否手动滚动页面
 scrollFlag: false,

//使用
 that.chcekScroll();
 that.executeScroll(true 或者 false);

 updated() {
    if (!this.container) {
      this.container = document.querySelector('.leftReturn');
    }
  },
  beforeDestroy() {
    if (this.container) {
      this.container.removeEventListener('scroll', () => {
        if (this.isUserScrolling) {
          this.scrollFlag = true;
        } else {
          this.scrollFlag = false;
        }
      });
      this.container.removeEventListener('wheel', () => {
        this.isUserScrolling = true;
      });
    }
  },

//  判断是否滚动
  chcekScroll() {
    this.isUserScrolling = false;
    this.container.addEventListener('scroll', () => {
      if (this.isUserScrolling) {
        this.scrollFlag = true;
      } else {
        this.scrollFlag = false;
      }
    });
    this.container.addEventListener('wheel', () => {
      this.isUserScrolling = true;
    });
  },
  // 输入内容执行滚动效果
  // scrollFlag:是否执行滚动 true:是,false:否
  executeScroll(scrollFlag) {
    if (scrollFlag) {
      this.$refs.chatScroll.scrollTop =
        this.$refs.chatScroll.scrollHeight - this.$refs.chatScroll.clientHeight;
    }
  },
### 实现 Vue2 中文本自动滚动效果 在 Vue2 项目中实现文本自动滚动效果可以通过利用 Vue 的响应式特性来动态更新 DOM 元素的位置,从而创建平滑的滚动动画。下面是一个完整的解决方案,该方案不仅实现了基本的文字向上滚动功能,还支持鼠标悬停时暂停滚动以及离开后的恢复操作。 #### HTML 结构定义 首先,在模板部分定义一个容器用于容纳即将滚动的内容: ```html <div class="scroll-container"> <ul :class="{ animate: isAnimating }" ref="list"> <!-- 动态渲染的消息项 --> <li v-for="(item, index) in items" :key="index">{{ item }}</li> </ul> </div> ``` 这里 `isAnimating` 是控制 CSS 类名切换的关键变量,而 `ref="list"` 则是为了方便后续通过 JavaScript 获取实际的 DOM 对象以便于精确调整其样式属性[^1]。 #### 数据与方法配置 接着,在组件选项对象内声明必要的数据字段生命周期钩子函数: ```javascript export default { data() { return { items: ['消息一', '消息二', '更多消息...'], // 待显示的信息数组 intervalId: null, isAnimating: false }; }, mounted() { this.startScrolling(); }, beforeDestroy() { clearInterval(this.intervalId); }, methods: { startScrolling() { let top = 0; const ulElement = this.$refs.list; function scrollUp() { if (top >= -(ulElement.scrollHeight - ulElement.clientHeight)) { top -= 30; // 每次移动的距离可以根据需求自定义 ulElement.style.transform = `translateY(${top}px)`; } else { top = 0; // 当到达底部后重置位置并继续滚动 ulElement.style.transitionDuration = "0ms"; // 移动瞬间完成无过渡效果 setTimeout(() => { // 延迟一小段时间再恢复正常速度防止视觉突兀感 ulElement.style.transitionDuration = ""; ulElement.style.transform = `translateY(0px)`; }, 16); // requestAnimationFrame 时间间隔约为16毫秒左右 } } this.isAnimating = true; this.intervalId = setInterval(scrollUp, 800); // 设置定时器每过一段时间触发一次滚动逻辑 } } } ``` 上述代码片段展示了如何初始化滚动行为,并且包含了当列表完全展示完毕之后重新回到顶部的功能。为了达到更好的用户体验,每当列表返回到起始状态之前会短暂地禁用 CSS 过渡效果以避免不必要的跳动现象发生[^4]。 #### 添加交互事件监听 为了让滚动更加人性化,可以在用户将指针放置于滚动区域上方时暂时停止滚动动作;一旦光标移开,则立即恢复正常的滚动流程。这可通过简单的事件绑定轻松达成: ```javascript mounted() { ... document.querySelector('.scroll-container').addEventListener('mouseenter', () => { this.isAnimating = false; clearInterval(this.intervalId); }); document.querySelector('.scroll-container').addEventListener('mouseleave', () => { this.startScrolling(); // 重启滚动机制 }); }, ``` 以上就是整个基于 Vue2 构建文字自动滚动特效的核心思路技术要点介绍[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值