用vue怎样编写一个能控制跑马灯的组件
Admin 2022-09-08 群英技术资讯 1090 次浏览
这篇文章主要介绍“用vue怎样编写一个能控制跑马灯的组件”的相关知识,下面会通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“用vue怎样编写一个能控制跑马灯的组件”文章能帮助大家解决问题。用vue编写一个可以快进后退的跑马灯组件
由于业务需求,要实现一个会可以控制速度的跑马灯,初开始用js的setinterval每隔几毫秒来减取一个字符拼接到后面,效果不理想就放弃了。后查询用js的animate这个api改造大功告成!
效果图

组件代码
<template>
<div class="marquee" @mouseover="pause(true)" @mouseleave="pause()">
<i
class="marquee-btn btn-left el-icon-d-arrow-left"
@mousedown="speedUp(true)"
@mouseup="speedStop()"
></i>
<div ref="marqueeText" class="marquee-text">
<div v-if="itemClick">
<span
v-for="item in text.split(splitSymbol)"
:key="item"
@click="$emit('itemClickEvent', item)"
>{{item + ' 、'}}</span>
</div>
<div v-else>{{text}}</div>
</div>
<i
class="marquee-btn btn-right el-icon-d-arrow-right"
@mousedown="speedUp()"
@mouseup="speedStop()"
></i>
</div>
</template>
<script>
export default {
name: "marquee",
props: {
text: {
type: String,
required: true
},
speed: {
type: Number,
required: false,
default: 110
},
// 是否每个都可以点击触发事件
itemClick: {
type: Boolean,
required: false,
default: false
},
// 每个触发事件元素的分割符号
splitSymbol: {
type: String,
required: false,
default: ''
}
},
data() {
return {
aniInstance: null,
speedTimer: null
};
},
methods: {
setAnimate() {
const contentWidth = this.$refs.marqueeText.scrollWidth;
const keyframes = [
{ transform: "translateX(100%)" },
{ transform: `translateX(-${contentWidth}px)` }
];
const animateOptions = {
duration: (contentWidth / this.speed) * 1000,
iterations: Infinity,
easing: "linear"
};
this.aniInstance = document.querySelector(".marquee-text").animate(keyframes, animateOptions);
},
/**
* 快进
* @param { Boolean } isLeft 是否为左方向
*/
speedUp(isLeft = false) {
const set = () => {
if (this.aniInstance.currentTime > 0) {
this.aniInstance.currentTime = this.aniInstance.currentTime + (isLeft ? 2000 : -2000);
this.aniInstance.currentTime <= 0 && (this.aniInstance.currentTime = 0);
}
}
// 鼠标单击
set();
// 鼠标长按
this.speedTimer = setInterval(() => {
set()
}, 100);
},
// 快进停止
speedStop() {
clearInterval(this.speedTimer);
this.speedTimer = null;
},
/**
* 暂停、播放
* @param { Boolean } isPause 是否暂停
*/
pause(isPause = false) {
this.aniInstance[["play", "pause"][Number(isPause)]]();
}
},
mounted() {
this.$nextTick(() => {
this.setAnimate();
});
}
};
</script>
<style lang="less" scoped>
.marquee {
position: relative;
padding: 10px 0;
overflow: hidden;
width: 100%;
font-size: 16px;
color: #fff;
background-image: linear-gradient(
to left,
#b9565e,
#cb655a,
#da7655,
#e58a50,
#eb9f4b
);
&:hover .marquee-btn {
opacity: 1;
}
}
.marquee-btn {
position: absolute;
top: 50%;
transform: translateY(-50%);
padding: 15px;
color: #fff;
background: rgba(1, 1, 1, 0.4);
z-index: 999;
cursor: pointer;
opacity: 0;
transition: all 0.2s linear;
}
.btn-left {
left: 0;
}
.btn-right {
right: 0;
}
.marquee-text {
white-space: nowrap;
span {
&:hover {
cursor: pointer;
color: #2c3e50;
}
}
}
</style>
父组件代码
<Marquee
:text="overdueInfo.content"
:itemClick="true"
:speed="120"
splitSymbol="、"
@itemClickEvent="marqueeSearch"
class="marquee-box__container"
></Marquee>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
并发控制是确保及时纠正由并发操作导致的错误的一种机制。我们在开发过程中,有时会遇到需要控制任务并发执行数量的需求。那么就需要做并发控制。例如一个爬虫程序,可以通过限制其并发任务数量来降低请求频率,从而避免由于请求过于频繁被封禁问题的发生。关于并发控制大家都了解了,下面我们就来说说JavaScript怎样实现并发控制?
jquery求浏览器宽度的方法:1、利用“$()”方法获取浏览器窗口对象;2、利用width()方法来求指定浏览器对象的宽度,该方法用于返回或者设置匹配元素的宽度,语法为“$(window).width()”。
本文主要介绍了Nodejs中koa2连接mysql的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
node实现定时任务的方法:1、利用setTimeOut和event事件进行管理;2、对所有加入的事件进行排序,并且计算当前时间和最近一个事件发生时间的时间间隔;3、调用setTimeOut设置回调即可。
js实现金额千分位方法,一些朋友可能会遇到这方面的问题,对此在下文小编向大家来讲解一下,内容详细,易于理解,希望大家阅读完这篇能有收获哦,有需要的朋友就往下看吧!
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008