vue图片轮播滚动(animejs)

javascript 复制代码
<template>
  <div class="case-hzhb">
    <div class="title">{{ title }}</div>
    <div class="case-hzhb-content">
      <div></div>
      <div></div>
      <div class="wrapper">
        <div class="boxes">
          <div v-for="(item, index) in boxList" :key="index" class="box">
            <img :src="getImageUrl(item)" alt="" />
          </div>
        </div>
      </div>
      <div class="wrapper">
        <div class="boxes">
          <div v-for="(item, index) in boxList2" :key="index" class="box2">
            <img :src="getImageUrl(item)" alt="" />
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script setup>
  import { onMounted, ref, defineProps } from 'vue'
  import anime from 'animejs'

  let props = defineProps({
    //
    title: {
      type: String,
      default: '客户信赖的合作伙伴',
    },
  })

  const boxList = ref([
    'cooperate-img1.png',
    'cooperate-img2.png',
    'cooperate-img7.png', //
    'cooperate-img4.png',
    'cooperate-img5.png',
    'cooperate-img6.png',
    'cooperate-img7.png',
    'cooperate-img8.png',
    'cooperate-img9.png',
    'cooperate-img10.png',
    'cooperate-img11.png',
  ])
  const boxList2 = ref([
    'cooperate-img12.png',
    'cooperate-img13.png',
    'cooperate-img14.png',
    'cooperate-img15.png',
    'cooperate-img16.png',
    'cooperate-img17.png',
    'cooperate-img18.png',
    'cooperate-img19.png',
    'cooperate-img20.png',
    'cooperate-img21.png',
    'cooperate-img22.png',
  ])

  const animeFu = (boxClass = '.box', dir = 'right', duration = 24000) => {
    let xTrans = []
    let xT = 260
    anime.set(boxClass, {
      translateX: function (el, i, l) {
        xTrans[i] = { x: i * xT }
        return i * xT
      },
    })

    let x = 260 * xTrans.length
    anime({
      targets: xTrans,
      duration: duration, //走一周持续时间
      easing: 'linear',
      x: dir === 'right' ? `+=${x}` : `-=${x}`,
      loop: true,
      update: function () {
        anime.set(boxClass, {
          translateX: function (el, i, l) {
            return dir === 'right' ? xTrans[i].x % x : (xTrans[i].x + x) % x
          },
        })
      },
    })
  }

  const getImageUrl = (url) => {
    return new URL(`../assets/image/partners/${url}`, import.meta.url).href
  }
  onMounted(() => {
    animeFu('.box', 'right')
    animeFu('.box2', 'left')
  })
</script>

<style lang="scss" scoped>
  .case-hzhb {
    width: 100%;
    > .title {
      font-size: 40px;
      font-weight: bold;
      color: #202531;
      margin: 0 auto;
      text-align: center;
      padding-top: 20px !important;
    }
    &-content {
      position: relative;
      max-width: 2560px;
      height: 280px;
      margin: 50px auto 40px;
      // border: 1px solid;
      > div:nth-child(1) {
        position: absolute;
        left: 0;
        z-index: 1;
        width: 64px;
        height: 280px;
        background: linear-gradient(
          to right,
          rgba(255, 255, 255, 1),
          rgba(255, 255, 255, 0)
        );
      }
      > div:nth-child(2) {
        position: absolute;
        right: 0;
        z-index: 1;
        width: 64px;
        height: 280px;
        background: linear-gradient(
          to left,
          rgba(255, 255, 255, 1),
          rgba(255, 255, 255, 0)
        );
      }

      .wrapper {
        width: 100%;
        height: 100px;
        position: relative;
        margin: 30px auto 0;
        // background: #ccc;
        overflow: hidden;
        .boxes {
          position: relative;
          left: -200px;
          .box,
          .box2 {
            width: 240px;
            height: 96px;
            background-color: #ffffff;
            // border: solid 2px #f7f7f9;
            position: absolute;
            > img {
              width: 100%;
              height: 100%;
            }
          }
        }
      }
    }
  }
</style>
相关推荐
周某人姓周8 小时前
DOM型XSS案例
前端·安全·web安全·网络安全·xss
程序员鱼皮8 小时前
前特斯拉 AI 总监:AI 编程最大的谎言,是 “提效”
前端·后端·ai·程序员·开发
Irene19918 小时前
Vue3 规范推荐的 <script setup> 中书写顺序(附:如何响应路由参数变化)
vue.js·路由
pusheng20258 小时前
普晟传感2026年新春年会总结与分析
前端·javascript·html
谢尔登8 小时前
React19事件调度的设计思路
前端·javascript·react.js
Emma_Maria9 小时前
本地项目html和jquery,访问地址报跨域解决
前端·html·jquery
奋斗吧程序媛9 小时前
常用且好用的命令
前端·编辑器
2301_796512529 小时前
【精通篇】打造React Native鸿蒙跨平台开发高级复合组件库开发系列:Lazyload 懒加载(懒加载的图片)
前端·javascript·react native·react.js·ecmascript·harmonyos
敲敲了个代码9 小时前
从N倍人力到1次修改:Vite Plugin Modular 如何拯救多产品前端维护困境
前端·javascript·面试·职场和发展·typescript·vite
摘星编程9 小时前
OpenHarmony环境下React Native:Timeline时间轴组件
javascript·react native·react.js