vue實(shí)現(xiàn)公告消息橫向無縫循環(huán)滾動(dòng)
本文實(shí)例為大家分享了vue實(shí)現(xiàn)公告消息橫向無縫循環(huán)滾動(dòng)的具體代碼,供大家參考,具體內(nèi)容如下
該組件實(shí)現(xiàn)了公告消息的無縫橫向滾動(dòng)。我命名為marqueex.vue文件,感謝原來博主的分享,我自己做個(gè)總結(jié)
marqueex.vue
<template> <div class="my-outbox"> ? <div class="my-inbox" ref='box'> ? ? <div class="my-list" :style="note" v-for="(item,index) in sendVal" :key='index' ref='list'> ? ? ? <!--{{item.name}}剛剛購買了產(chǎn)品--> ? ? ? <span class="my-uname">{{item.detail}}</span> ? ? </div> ? </div> </div> </template> <script> export default { ? name: 'my-marquee-left', ? props: { ? ? ? ? sendVal:{ ? ? ? ? type:Array, ? ? ? ? default:[] ? ? } ? }, ? data () { ? ? return { ? ? ? ? note: { ? ? ? ? backgroundImage: ? ? ? ? ? "url(" + require("../../../static/images/common/msg.png") + ")", ? ? ? ? backgroundSize: "20px 20px", ? ? ? ? backgroundRepeat: "no-repeat", ? ? ? ? backgroundPosition:"1% ?50%" ? ? ? }, ? ? ? // 定時(shí)器標(biāo)識 ? ? ? nowTime: null, ? ? ? // 每一個(gè)內(nèi)容的寬度 ? ? ? disArr: [] ? ? } ? }, ? mounted () { ? ? // var that = this ? ? var item = this.$refs.list ? ? var len = this.sendVal.length ? ? var arr = [] ? ? // 因?yàn)樵O(shè)置的margin值一樣,所以取第一個(gè)就行。 ? ? var margin = this.getMargin(item[0]) ? ? for (var i = 0; i < len; i++) { ? ? ? arr.push(item[i].clientWidth + margin) // 把寬度和 margin 加起來就是每一個(gè)元素需要移動(dòng)的距離 ? ? } ? ? this.disArr = arr ? ? this.moveLeft() ? }, ? beforeDestroy () { ? ? // 頁面關(guān)閉清除定時(shí)器 ? ? clearInterval(this.nowTime) ? ? // 清除定時(shí)器標(biāo)識 ? ? this.nowTime = null ? }, ? methods: { ? ? // 獲取margin屬性 ? ? getMargin (obj) { ? ? ? var marg = window.getComputedStyle(obj, null)['margin-right'] ? ? ? marg = marg.replace('px', '') ? ? ? return Number(marg) // 強(qiáng)制轉(zhuǎn)化成數(shù)字 ? ? }, ? ? // 移動(dòng)的方法 ? ? moveLeft () { ? ? ? var that = this ? ? ? var outbox = this.$refs.box ? ? ? // 初始位置 ? ? ? var startDis = 0 ? ? // ? console.log('that.disArr: ', that.disArr) ? ? ? this.nowTime = setInterval(function () { ? ? ? ? startDis -= 0.5 ? ? ? ? // console.log('初始化移動(dòng):', startDis) ? ? ? ? if (Math.abs(startDis) > Math.abs(that.disArr[0])) { ? ? ? ? ? // 每次移動(dòng)完一個(gè)元素的距離,就把這個(gè)元素的寬度 ? ? ? ? ? that.disArr.push(that.disArr.shift()) ? ? ? ? ? // 每次移動(dòng)完一個(gè)元素的距離,就把列表數(shù)據(jù)的第一項(xiàng)放到最后一項(xiàng) ? ? ? ? ? // console.log('that.sendVal: ', that.sendVal) ? ? ? ? ? // console.log('that.sendVal: ', that.sendVal.shift()) ? ? ? ? ? that.sendVal.push(that.sendVal.shift()) ? ? ? ? ? startDis = 0 ? ? ? ? ? // console.log('移動(dòng)') ? ? ? ? } else { ? ? ? ? ? // console.log('不來不來就不來...') ? ? ? ? } ? ? ? ? // 每次都讓盒子移動(dòng)指定的距離,在我自己做的項(xiàng)目中,這種字符串拼接的方法并沒有生效 ? ? ? ? // outbox.style = 'transform: translateX3d(' + startDis + 'px)'? ? ? ? ? // 后面換了es6的模板字符串就可以了 ? ? ? ? outbox.style = `transform: translateX(${startDis}px)` ? ? ? ? // outbox.style = 'transform: translateX(\' + startDis + \' px)' ? ? ? ? // outbox.style.marginLeft = 'startDis' ? ? ? ? // console.log('這里:', startDis) ? ? ? }, 1000 / 60) ? ? } ? } } </script> <style lang="less" scoped> .my-outbox{ ? /*color: #D7BC8D;*/ ? overflow: hidden; ? color: #FFFFFF; ? height: 35px; ? /*background: #422b02;*/ ? .my-inbox{ ? ? white-space: nowrap; ? ? .my-list{ ? ? ? margin-right: 100px; ? ? ? display: inline-block; ? ? ? font-size: 14px; ? ? ? // height: 20px; ? ? ? text-indent:30px; ? ? ? line-height: 40px; ? ? ? .my-uname{ ? ? ? ? /*color: #FF8900;*/ ? ? ? ? color: #FFFFFF; ? ? ? } ? ? } ? } } </style>
其他模塊引入根據(jù)自己目錄引入
html部分
<div class="messageBox"> ? ? ? <marqueeLeft :sendVal="newsList"></marqueeLeft> </div>
js部分
import marqueeLeft from "./marqueeX"; export default { ? data() { ? ? return { ? ? ? newsList: [ ? ? ? ? { ? ? ? ? ? name: "張三1", ? ? ? ? ? detail: ? ? ? ? ? ? "信息公告:2020年10月14限公司成立,我行用信金額111111元", ? ? ? ? }, ? ? ? ? { ? ? ? ? ? name: "張三2", ? ? ? ? ? detail: ? ? ? ? ? ? "信息公告:2020年9月30大幅度發(fā)大發(fā)的,我行用信金額222222元", ? ? ? ? }, ? ? ? ? { ? ? ? ? ? name: "張三3", ? ? ? ? ? detail: ? ? ? ? ? ? "信息公告:2020年12月有限公司成立,我行用信金額333333元", ? ? ? ? }, ? ? ? ? { ? ? ? ? ? name: "張三4", ? ? ? ? ? detail: ? ? ? ? ? ? "信息公告:2020年8月31有限公司成立,我行用信金額444444元", ? ? ? ? }, ? ? ? ], ? ? }; ? }, ? components: { ? ? marqueeLeft, ? },
css部分
.messageBox { ? width: 60%; ? overflow: hidden; }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于Vue-Cli 打包自動(dòng)生成/抽離相關(guān)配置文件的實(shí)現(xiàn)方法
基于Vue-cli 項(xiàng)目產(chǎn)品部署,涉及到的交互的地址等配置信息,每次都要重新打包才能生效,極大的降低了效率。這篇文章主要介紹了基于Vue-Cli 打包自動(dòng)生成/抽離相關(guān)配置文件 ,需要的朋友可以參考下2018-12-12Vue生產(chǎn)和開發(fā)環(huán)境如何切換及過濾器的使用
本文主要介紹了Vue生產(chǎn)、開發(fā)環(huán)境如何切換及過濾器的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08vue3圖片剪裁插件vue-img-cutter使用小結(jié)
Vue.js是一款流行的JavaScript前端框架,很受用戶喜愛,這篇文章主要介紹了vue3圖片剪裁插件vue-img-cutter使用小結(jié),本文結(jié)合示例代碼講解的非常詳細(xì),感興趣的朋友一起看看吧2024-01-01vue中動(dòng)態(tài)修改img標(biāo)簽中src的方法實(shí)踐
本文主要介紹了vue中動(dòng)態(tài)修改img標(biāo)簽中src的方法實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07vxe-table?實(shí)現(xiàn)表格數(shù)據(jù)分組功能(按指定字段數(shù)據(jù)分組)
文章介紹了如何使用樹結(jié)構(gòu)實(shí)現(xiàn)表格數(shù)據(jù)分組,并提供了官方文檔的鏈接,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-11-11