H5单页面引入vue实现弹幕效果

效果图
在这里插入图片描述
body

        <div class="barrage_area">
            <!-- 弹幕 -->
            <div class="dmGroup" v-for="(item,index) in dmData" :key="index"
                v-bind:style="{top:item.top +'%',animationName:'dmAnimation',animationDuration:item.time + 's',animationTimingFunction:'linear',animationDelay:index*3+'s',animationIterationCount:'infinite',animationPlayState:'running'}">
                <div class="dmItem">
                    <div class="dm">
                        <div class="avatarBox">
                            <img :src="item.avatar" class="avatar" />
                        </div>
                        <span class="content">{{ item.nickname }} 领取{{shopInfoname}}成功</span>
                    </div>
                </div>
            </div>
        </div>

js

    <script>
    new Vue({
        el: "#Vue",
        data: {
            shopInfoname: "丝氨酸水润次抛原液(试用装)",
            dmData: [
                {
                    avatar:
                        'https://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTIcUo7yZejHaB988CuNHXhNYPB2biaKg4IXAI3n1ng5FrqFH16RUL7EVLv6NoGXwse7XwJCEwVVSsA/132',
                    id: 17288,
                    nickname: '感恩+勇敢=成功',
                },
                {
                    avatar:
                        'https://wx.qlogo.cn/mmopen/vi_32/CV9kk5M26peQnyQDL8q1Zt8m3iay9zP3Q7XibIVCrvlNicq6cTib3CyibDGRr2N03srRIgadlw8CicDgxCicAYZagibZeQ/132',
                    id: 17312,
                    nickname: '.',
                }
            ],

        },
        created() {
            this.parameters(this.dmData)
        },
        methods: {
            //处理弹幕参数
            parameters(e) {
                const dmArr = [];
                const _b = e;
                for (let i = 0; i < _b.length; i++) {
                    const time = Math.floor(Math.random() * 10);
                    const second = Math.floor(Math.random() * 60);
                    const _time = time < 6 ? 6 + i : time + i;
                    const top = Math.floor(Math.random() * 80) + 2;
                    const _p = {
                        id: _b[i].id,
                        nickname: _b[i].nickname,
                        avatar: _b[i].avatar,
                        top,
                        second,
                        time: _time,
                    };
                    dmArr.push(_p);
                }
                this.dmData = dmArr
            }
        }
    })
</script>

css

        /* // 弹幕 */
        .dmGroup {
            position: absolute;
            top: 70px;
            left: 100%;
            z-index: 10;
            animation-timing-function: linear;
            animation-fill-mode: none;
            transform: translateZ(0);
            white-space: nowrap;
            height: 30px;
            animation: dmAnimation 5s linear 2s infinite alternate;
        }

        .dmItem {
            display: inline-flex;
            margin-right: 30px;
            white-space: nowrap;
        }

        .dmItem .dm {
            display: inline-flex;
            vertical-align: middle;
            align-items: center;
            position: relative;
            height: 25px;
            line-height: 25px;
            padding: 0 7.5px 0 2.5px;
            background: rgba(0, 2, 2, 0.28);
            border-radius: 12.5px;
            overflow: hidden;
            font-size: 12px;
            color: rgba(255, 255, 255, 1);
        }

        .dmItem .avatarBox {
            display: inline-block;
            position: relative;
            width: 20px;
            height: 20px;
            margin-right: 5px;
        }

        .dmItem .avatarBox .avatar {
            width: 20px;
            height: 20px;
            border: 0;
            border-radius: 50%;
            overflow: hidden;
        }

        .dmItem .dm .content {
            display: inline-block;
            max-width: 250px;
            height: 25px;
            line-height: 25px;
            margin-right: 5px;
            white-space: nowrap;
            text-overflow: ellipsis;
            overflow: hidden;
        }

        @keyframes dmAnimation {
            from {
                left: 100%;
            }

            to {
                left: -100%;
            }
        }

        .barrage_area {
            width: 100%;
            height: 10rem;
            position: relative;
            background: #aaa;
        }
        /* 弹幕 */
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值