首页 > 其他分享 >vue3实现图片滚动播放

vue3实现图片滚动播放

时间:2023-07-27 15:45:28浏览次数:37  
标签:滚动 imgBox theSpeed value let timer vue3 播放 left

<template>   <div class="swiperBox">     <div id="swiper">       <div class="imgBox" @mouseenter="mouseenter" @mouseleave="mouseleave">         <a v-for="(x, i) in LinkList" :key="i" class="a-link imgDiv" :href="x.Link" target="_blank">           <Image class="relative" :src="x.BgImg" width="200px" height="80px" :preview="false" />           <span class="text-position">{{ x.Text }}</span>         </a>       </div>     </div>   </div> </template> <script lang="ts" setup>   import { ref, onMounted, onBeforeUnmount } from 'vue';   import { Image } from '/@mid/components/Image';
  let LinkList = [ {     Text: '图1',     Link: '', // 图片链接     BgImg: '/images/bg/1.png', // 图片地址   }, {     Text: '图2',     Link: '', // 图片链接     BgImg: '/images/bg/1.png', // 图片地址   }, ]; // 存放图片数组   let timer = ref<number | any>(0);   let imgWidth = ref<number>(260);   let theSpeed = ref<number>(2);   let imgBox = ref<Element | null>(null);   onMounted(() => {     imgBox.value = document.getElementsByClassName('imgBox')[0];     //将imgBox下的图片进行拼接 循环展示图片     if (imgBox.value) imgBox.value.innerHTML += imgBox.value?.innerHTML;     let imgDiv = document.getElementsByClassName('imgDiv');     //设置div的宽度使图片可以放下     if (imgBox.value) {       imgBox.value.style.width = imgDiv.length * imgWidth.value + 'px';       timer.value = setInterval(autoScroll, 40); //全局变量 ,保存返回的定时器     }   }); // 图片滚动设置   function autoScroll() {     if (imgBox.value.offsetLeft < -(imgBox.value.offsetWidth / 2)) {       //提前更新left值,实现循环展示       imgBox.value.style.left = 0;     }     if (imgBox.value.offsetLeft > 0) {       //向右滚动 提前更新left值,实现循环展示       imgBox.value.style.left = -(imgBox.value.offsetWidth / 2) + 'px';     }     //向左滚动     theSpeed.value = -Math.abs(theSpeed.value);     // 向右滚动     // theSpeed.value = Math.abs(theSpeed.value);     // 求出总的left值,等于left值加上移动的速度(px值)     imgBox.value.style.left = imgBox.value.offsetLeft + theSpeed.value + 'px';   }   onBeforeUnmount(() => {     clearInterval(timer.value);     timer.value = 0;   });   //  // 鼠标移入时停止滚动   function mouseenter() {     clearInterval(timer.value);   }   // 鼠标移开继续滚动   function mouseleave() {     timer.value = setInterval(autoScroll, 40);   } </script> <style scoped lang="less">   .swiperBox {     height: 100%;     width: 100%;     position: relative;     #swiper {       width: 100%;       height: 100%;       margin: 0 auto;       overflow: hidden;       position: relative;       .imgBox {         height: 100%;         position: absolute;         left: 0;         top: 0;         overflow: hidden;         display: flex;         .imgDiv {           width: 200px;           position: relative;           margin-right: 10px;           .text-position {             position: absolute;             top: 26%;             left: 11%;             font-size: 20px;             font-weight: bold;             color: #fff;             background-image: -webkit-linear-gradient(bottom, #c2c2c2, #ffffff, #b6b6b6);             -webkit-background-clip: text;             -webkit-text-fill-color: #ffffff5c;           }         }       }     }   } </style>

标签:滚动,imgBox,theSpeed,value,let,timer,vue3,播放,left
From: https://www.cnblogs.com/ocenea-cxn/p/17585143.html

相关文章

  • vue2和vue3的区别
    1.性能提升vue3对性能进行了优化,相较于vue2,在运行时的性能更高。vue3采用了Proxy代理机制,使得在数据变化时可以更快的更新视图,从而提供了更好的响应性能。2.ComposiitonAPI(组合式API)vue3引入了CompsitionAPI,这是一种新的API风格,它允许开发者更好的组织和重用代码。相比于......
  • vue3状态管理工具Pinia的使用
    1.安装  npminstallpinia--save 2.src文件夹下新建store文件夹,并新建index.tsimport{createPinia}from'pinia'constpinia=createPinia()exportdefaultpinia2.在main.ts中引入piniaimportpiniafrom'./store'import{createApp}from'vue'......
  • vue3中的watch与vue2中的watch的对比
    新版的 watch 和旧版对比,在使用方式上变化非常大!旧版是这样用的,和 data 、 methods 都在同级配置://旧版的写法:exportdefault{watch:{//...},data(){return{//...}},methods:{//...}} 新版的 watch......
  • AI视频监控综合管理平台EasyCVR多分屏默认播放协议的配置优化
    视频监控综合管理平台EasyCVR具备视频融合汇聚能力,TSINGSEE青犀视频平台基于云边端一体化架构,可支持多协议、多类型设备接入,包括:NVR、IPC、视频编码器、无人机、车载设备、智能手持终端、移动执法仪等。国标GB28181视频平台EasyCVR具有强大的数据接入、处理及分发能力,可在复杂的网......
  • hls协议下支持h.265视频web/H5播放方案
    一般我们播放本地视频都是使用video标签,但是<video>元素只支持三种视频格式:MP4、WebM、Ogg,对于在线视频直接使用video是没法播放的,这里介绍一款做播放在线监控视频功能时使用过的一款播放器。先介绍几个概念:流协议:流协议就是在两个通信系统之间传输多媒体文件的一套规则,它定义了......
  • MFC-MessageBeep播放系统定义的波形声音
     MessageBeep(MB_ICONEXCLAMATION);//播放系统定义的波形声音/*-1从机器的扬声器中发出蜂鸣声MB_ICONASTERISK播放由SystemAsterisk定义的声音MB_ICONEXCLAMATION播放由SystemExclamation定义的声音MB_ICONHAN......
  • H265格式兼容各个浏览器网页web端H5播放方案
    可能有很多朋友会遇到H265格式的视频流无法播放,毕竟现在很多相机都支持h265了,确实有很多优点,但是它最大的问题就是很多浏览器无法播放,也有部分浏览器能够兼容h265,但是总不能让用户指定浏览器使用吧,下面来说说怎么兼容各个浏览器播放无非两种方案,第一种就是使用ffmpeg进行转码,这种方......
  • 视频直播系统源码,vue自定义模拟滚动条
    视频直播系统源码,vue自定义模拟滚动条vscroll自定义滚动条模板 <template> <divclass="vui__scrollbar"ref="ref__box"@mouseenter="handleMouseEnter"@mouseleave="handleMouseLeave"v-resize="handleResize">  <div:......
  • 如何实现在web浏览器播放H.265编码视频?网页全终端安防视频流媒体播放器
    目前安防监控行业,基本所有的摄像头都支持H264编码,但是已经有部分摄像头开始支持H265,并且支持H265的摄像机已经越来越多。H265相比H264有着很多优势,压缩更高,网络传输消耗的带宽更小,相同码率下H265视频更清晰。H264目前已经可以在各种web浏览器、客户端等进行解码播放,但是目前H.265编......
  • Vue3 组件篇
    组件命名组件的命名一般分为两种在单文件组件中,推荐为子组件使用PascalCase的标签名,以此来和原生的HTML元素作区分。虽然原生HTML标签名是不区分大小写的,但Vue单文件组件是可以在编译中区分大小写的。我们也可以使用/>来关闭一个标签。使用kebab-case形式并显式地......