vue 动画效果

<template>

    <div class="notice-box" @mousemove="mousemove"  @mouseleave="mouseleave" style="height:50px;background:#ccc;color:#fff;position: relative;">

        <div class="notice" :style="{'animation-duration':len, 'animation-play-state': play}"><div style="    display: inline-block;margin-right:20px;" v-for="item in list" :key="item.id">{{item.name}}</div></div>

    </div>

</template>

<script>

    import { defineComponent, ref } from '@vue/composition-api'

    import { Input} from 'element-ui'

    export default defineComponent({

        components: { Input },

        setup() {

            const list = ref([

                { name: '下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次' },

             { name: '下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次' },

             { name: '下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次' },

             { name: '下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次下次' },

             ])

            const len = ref(0)

            const len2 = ref(0)

            const play = ref('running')

            return { list, len, len2, play }

        },

        mounted() {

            this.notice();

        },

        methods: {

            mouseleave() {

                this.play = 'running'

            },

            mousemove() {

                this.play = 'paused'

            },

            notice() {

                const noticeBox = document.getElementsByClassName('notice-box')[0];

                const notice = document.getElementsByClassName('notice')[0];

                if (notice.clientWidth < noticeBox.clientWidth) {

                    this.len = (noticeBox.clientWidth + notice.clientWidth) / 80 + 's'

                } else {

                    this.len = notice.clientWidth / 80 + 's'

                }

                let style = document.createElement('style');

                style.setAttribute('type', 'text/css');

                document.head.appendChild(style);

                let sheet = style.sheet;

                sheet.insertRule(`

                    @keyframes notice {

                        0% {

                            transform: translateX(${noticeBox.clientWidth}px);

                        }

                        100% {

                            transform: translateX(-${notice.clientWidth}px);

                        }

                    }

                `)

            }

        }

    })

</script>

<style scoped>

    

    .notice{

        position: absolute;

        white-space: nowrap;display: inline-block;

        animation:notice infinite;animation-timing-function:linear;

    }

</style>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值