vue实现点击上下按钮或上下箭头,列表上下滚动功能及特效

组件使用li列表,将需要滚动的块包装为div,设置高度

<div>
    <ul>
      <div class="menu-div" id="menu">
        <li v-for="i in list" :key="i.value">{{i.value}}</li>
      </div>
    </ul>
    <el-button @click="handleScroll('up')" size="mini" type="primary">向上</el-button>
    <el-button @click="handleScroll('down')" size="mini" type="primary">向下</el-button>
  </div>

css

.menu-div{
  margin: 16px 0;
  height: 200px;
  overflow-y: hidden;
  ul li {
    list-style: none;
  }
}

具体滚动方法

// 生成list
    handleList() {
      for (let i = 0; i < 100; i++) {
        this.list.push({
          label: i + 1,
          value: i + 1
        })
      }
    },
    // 滚动效果
    easeInQuad(curtime,begin,end,duration){
      let x = curtime/duration; //x值
      let y = x*x; //y值
      return begin+(end-begin)*y; //套入最初的公式
    },
    easeOutQuad(curtime,begin,end,duration){
      let x = curtime/duration;         //x值
      let y = -x*x + 2*x;  //y值
      return begin+(end-begin)*y;        //套入最初的公式
    },
    easeInoutQuad(curtime,begin,end,duration){
      if(curtime<duration/2){ //前半段时间
        return this.easeInQuad(curtime,begin,(begin+end)/2,duration/2);//改变量和时间都除以2
      }else{
        let curtime1 = curtime-duration/2; //注意时间要减去前半段时间
        let begin1 = (begin+end)/2;//初始量要加上前半段已经完成的
        return this.easeOutQuad(curtime1,begin1,end,duration/2);//改变量和时间都除以2
      }
    },
    // 滚动
    handleScroll (action) {
      let menuScroll = document.getElementById('menu')
      // 每次滚动距离
      let dis = 60;
      // 滚动时长
      let duration = 500;
      // 初始距离
      let preX = 0;
      let startTime = new Date().getTime();
      let func = ()=>{
        let nowTime = new Date().getTime();
        let t = nowTime - startTime;
        // 当时长大于500时,停止滚动
        if (t > duration){
          return;
        }
        let s = this.easeInoutQuad(t, 0, dis, duration);
        // 每次滚动距离
        let x = s - preX;
        preX = s;
        if (action === 'up') {
          // 向上滚动
          menuScroll.scrollTop -= x
        } else if (action === 'down') {
          // 向上滚动
          menuScroll.scrollTop += x
        }
        // 请求滚动
        requestAnimationFrame(func)
      }
      requestAnimationFrame(func)
    }

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在Vue 3中实现点击上下滚动,你可以使用`ref`来绑定滚动容器,并通过`scrollTo`方法来实现滚动效果。以下是一个简单的示例代码: 1. 首先,在你的Vue组件中,使用`ref`创建一个滚动容器的引用: ```javascript import { ref } from 'vue'; export default { setup() { const scrollContainer = ref(null); // 点击按钮滚动到上方 const scrollUp = () => { scrollContainer.value.scrollTop -= 100; // 根据需要调整滚动距离 }; // 点击按钮滚动到下方 const scrollDown = () => { scrollContainer.value.scrollTop += 100; // 根据需要调整滚动距离 }; return { scrollContainer, scrollUp, scrollDown }; } } ``` 2. 在Vue组件的模板中,绑定滚动容器和点击事件: ```html <template> <div> <button @click="scrollUp">上</button> <button @click="scrollDown">下</button> <div ref="scrollContainer" class="scroll-container"> <!-- 滚动内容 --> </div> </div> </template> ``` 3. 最后,确保给滚动容器添加样式,以便显示滚动条并限制容器高度: ```css .scroll-container { overflow-y: scroll; max-height: 300px; /* 根据需要调整容器高度 */ } ``` 在上面的代码中,我们使用`ref`来创建了一个名为`scrollContainer`的引用,并在模板中使用`ref`指令将其绑定到滚动容器元素上。然后,我们定义了`scrollUp`和`scrollDown`方法来处理点击事件,并通过修改滚动容器的`scrollTop`属性来实现滚动效果。 请注意,你可以根据实际需要调整滚动距离和容器高度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值