vue2、vue3 实现文本超出自动滚动

一、直接上代码

<template>
    <div class="sizeScroll">
        <h1>1、文字滚动·超出时自动滚动</h1>
        <div class="content" ref="songName1">
            <div id="inner" :class="{innerActive: nameScroll }">
                <span ref="first" id="first">本店主营拉面,刀削面,烩面,盖浇饭</span>
                <span id="second">本店主营拉面,刀削面,烩面,盖浇饭</span>
            </div>
        </div>
    </div>
</template>

<script>
import { onMounted, ref, getCurrentInstance  } from 'vue'
export default {
		/** vue2写法 */
    // data() {
    //     return {
    //         nameScroll: false
    //     }
    // },
    // mounted() {
    //     console.log(this.$refs.songName1.clientWidth,'his.$refs.songName1.clientWidth');
    //     if (this.$refs.songName1.clientWidth > this.$refs.first.clientWidth) {
    //         this.nameScroll = true
    //     } else {
    //         this.nameScroll = false
    //     }
    // }
    /** vue3写法 */
    setup() {
        const internalInstance  = getCurrentInstance()
        let nameScroll = ref(false)
        onMounted(() => {
            console.log(internalInstance.ctx.$refs.songName1.clientWidth, internalInstance.ctx.$refs.first.clientWidth, 'songName1.clientWidth');
            if (internalInstance.ctx.$refs.songName1.clientWidth < internalInstance.ctx.$refs.first.clientWidth) {
                nameScroll.value = true
            } else {
                nameScroll.value = false
            }

        })
        return { nameScroll }
    }
}
</script>

<style lang="scss" scoped>
h1{ font-weight: bold; }
.sizeScroll{
    padding: 36px;
    .content {
        overflow: hidden;
        position: relative;
        width: 200px;
        height: 50px;
        margin: 16px 10%;
        white-space: nowrap;
        border: 1px solid #808080;
    }
    #inner {
        position: absolute;
    }
    .innerActive{
        animation: slide 5s linear infinite;
        #first{
            margin-right: 8px;
        }
        #second{
            display: inline-block;
        }
    }

    #first{
        display: inline-block;
        border: 1px solid red;
    }

    #second{
        display: none;
        border: 1px solid green;
    }

    @keyframes slide {
        0% {
            transform: translateX(0);
        }
        100% {
            transform: translateX(-51%);
        }
    }
}
</style>

二、实际效果

fileOverfiewscroll

直接copy过去,修改参数即可使用。

原文章 ==> css 文本超出自动滚动

Logo

前往低代码交流专区

更多推荐