vue實現(xiàn)公告消息橫向無縫循環(huán)滾動
本文實例為大家分享了vue實現(xiàn)公告消息橫向無縫循環(huán)滾動的具體代碼,供大家參考,具體內(nèi)容如下
該組件實現(xiàn)了公告消息的無縫橫向滾動。我命名為marqueex.vue文件,感謝原來博主的分享,我自己做個總結(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%"
? ? ? },
? ? ? // 定時器標識
? ? ? nowTime: null,
? ? ? // 每一個內(nèi)容的寬度
? ? ? disArr: []
? ? }
? },
? mounted () {
? ? // var that = this
? ? var item = this.$refs.list
? ? var len = this.sendVal.length
? ? var arr = []
? ? // 因為設(shè)置的margin值一樣,所以取第一個就行。
? ? var margin = this.getMargin(item[0])
? ? for (var i = 0; i < len; i++) {
? ? ? arr.push(item[i].clientWidth + margin) // 把寬度和 margin 加起來就是每一個元素需要移動的距離
? ? }
? ? this.disArr = arr
? ? this.moveLeft()
? },
? beforeDestroy () {
? ? // 頁面關(guān)閉清除定時器
? ? clearInterval(this.nowTime)
? ? // 清除定時器標識
? ? this.nowTime = null
? },
? methods: {
? ? // 獲取margin屬性
? ? getMargin (obj) {
? ? ? var marg = window.getComputedStyle(obj, null)['margin-right']
? ? ? marg = marg.replace('px', '')
? ? ? return Number(marg) // 強制轉(zhuǎn)化成數(shù)字
? ? },
? ? // 移動的方法
? ? 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('初始化移動:', startDis)
? ? ? ? if (Math.abs(startDis) > Math.abs(that.disArr[0])) {
? ? ? ? ? // 每次移動完一個元素的距離,就把這個元素的寬度
? ? ? ? ? that.disArr.push(that.disArr.shift())
? ? ? ? ? // 每次移動完一個元素的距離,就把列表數(shù)據(jù)的第一項放到最后一項
? ? ? ? ? // console.log('that.sendVal: ', that.sendVal)
? ? ? ? ? // console.log('that.sendVal: ', that.sendVal.shift())
? ? ? ? ? that.sendVal.push(that.sendVal.shift())
? ? ? ? ? startDis = 0
? ? ? ? ? // console.log('移動')
? ? ? ? } else {
? ? ? ? ? // console.log('不來不來就不來...')
? ? ? ? }
? ? ? ? // 每次都讓盒子移動指定的距離,在我自己做的項目中,這種字符串拼接的方法并沒有生效
? ? ? ? // 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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于Vue-Cli 打包自動生成/抽離相關(guān)配置文件的實現(xiàn)方法
基于Vue-cli 項目產(chǎn)品部署,涉及到的交互的地址等配置信息,每次都要重新打包才能生效,極大的降低了效率。這篇文章主要介紹了基于Vue-Cli 打包自動生成/抽離相關(guān)配置文件 ,需要的朋友可以參考下2018-12-12
Vue生產(chǎn)和開發(fā)環(huán)境如何切換及過濾器的使用
本文主要介紹了Vue生產(chǎn)、開發(fā)環(huán)境如何切換及過濾器的使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08
vue3圖片剪裁插件vue-img-cutter使用小結(jié)
Vue.js是一款流行的JavaScript前端框架,很受用戶喜愛,這篇文章主要介紹了vue3圖片剪裁插件vue-img-cutter使用小結(jié),本文結(jié)合示例代碼講解的非常詳細,感興趣的朋友一起看看吧2024-01-01
vxe-table?實現(xiàn)表格數(shù)據(jù)分組功能(按指定字段數(shù)據(jù)分組)
文章介紹了如何使用樹結(jié)構(gòu)實現(xiàn)表格數(shù)據(jù)分組,并提供了官方文檔的鏈接,本文結(jié)合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-11-11

