最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue實現(xiàn)可以快進后退的跑馬燈組件

 更新時間:2022年04月08日 09:36:45   作者:Daheishuai  
這篇文章主要為大家詳細介紹了vue編寫一個可以快進后退的跑馬燈組件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了vue開發(fā)實現(xiàn)跑馬燈效果組件的具體代碼,供大家參考,具體內(nèi)容如下

用vue編寫一個可以快進后退的跑馬燈組件

由于業(yè)務(wù)需求,要實現(xiàn)一個會可以控制速度的跑馬燈,初開始用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
? ? },
? ? // 是否每個都可以點擊觸發(fā)事件
? ? itemClick: {
? ? ? type: Boolean,
? ? ? required: false,
? ? ? default: false
? ? },
? ? // 每個觸發(fā)事件元素的分割符號
? ? 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>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue.js每天必學(xué)之表單控件綁定

    Vue.js每天必學(xué)之表單控件綁定

    Vue.js每天必學(xué)之表單控件綁定,如何在表單控件元素上創(chuàng)建雙向數(shù)據(jù)綁定,感興趣的小伙伴們可以參考一下
    2016-09-09
  • vue實現(xiàn)列表無縫滾動

    vue實現(xiàn)列表無縫滾動

    這篇文章主要為大家詳細介紹了vue實現(xiàn)列表無縫滾動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • vue中格式化時間過濾器代碼實例

    vue中格式化時間過濾器代碼實例

    這篇文章主要介紹了vue格式化時間過濾器,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • vue實現(xiàn)接口封裝的實現(xiàn)示例

    vue實現(xiàn)接口封裝的實現(xiàn)示例

    本文主要介紹了vue實現(xiàn)接口封裝的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • ES6 Proxy實現(xiàn)Vue的變化檢測問題

    ES6 Proxy實現(xiàn)Vue的變化檢測問題

    Vue3.0將采用ES6 Proxy的形式重新實現(xiàn)Vue的變化檢測,在官方還沒給出新方法之前,我們先實現(xiàn)一個基于Proxy的變化檢測。感興趣的朋友跟隨小編一起看看吧
    2019-06-06
  • vue3保存屬性自動換行問題及解決

    vue3保存屬性自動換行問題及解決

    這篇文章主要介紹了vue3保存屬性自動換行問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue遍歷中存在el-form之踩坑記錄

    vue遍歷中存在el-form之踩坑記錄

    這篇文章主要介紹了vue遍歷中存在el-form之踩坑記錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • ElementUI之Message功能拓展詳解

    ElementUI之Message功能拓展詳解

    這篇文章主要介紹了ElementUI之Message功能拓展詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • avue實現(xiàn)自定義搜索欄及清空搜索事件的實踐

    avue實現(xiàn)自定義搜索欄及清空搜索事件的實踐

    本文主要介紹了avue實現(xiàn)自定義搜索欄及清空搜索事件的實踐,主要包括對搜索欄進行自定義,并通過按鈕實現(xiàn)折疊搜索欄效果,具有一定的參考價值,感興趣的可以了解一下
    2021-12-12
  • vue中數(shù)組常用的6種循環(huán)方法代碼示例

    vue中數(shù)組常用的6種循環(huán)方法代碼示例

    在vue項目開發(fā)中,我們需要對數(shù)組進行處理等問題,這里簡單記錄遍歷數(shù)組的幾種方法,這篇文章主要給大家介紹了關(guān)于vue中數(shù)組常用的6種循環(huán)方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-03-03

最新評論

镇江市| 大石桥市| 东安县| 元谋县| 广平县| 井冈山市| 大冶市| 天峨县| 六枝特区| 扶沟县| 伊川县| 漯河市| 广平县| 佛冈县| 青岛市| 宁南县| 海南省| 安西县| 高邮市| 淄博市| 蕲春县| 汤阴县| 山西省| 台江县| 铁岭市| 伽师县| 文水县| 万荣县| 灯塔市| 宜良县| 上杭县| 舒城县| 德清县| 宽甸| 陵水| 沽源县| 兴隆县| 钟祥市| 南木林县| 吴堡县| 湘潭市|