美文网首页
文字超出滚动 uni-app组件

文字超出滚动 uni-app组件

作者: 吖蛋黄 | 来源:发表于2020-04-24 17:16 被阅读0次

    一、预览图

    文字超出滚动.gif

    二、实现的点

    1.文字超出父元素宽度,自动滚动
    2.文字不超出父元素宽度,不滚动
    3.自动计算滚动时间,控制滚动速度
    4.兼容H5、小程序

    三、实现代码

    components/textScroll/index.vue 组件代码如下:

    <template>
        <div class="tip">
            <div class="inner" :class="{'move': scroll}" :style="styleName">
                <text class="tip-inder">{{text}} {{scroll ? text : '' }}</text>
            </div>
        </div>
    </template>
    
    <script>
        export default {
            props: {
                text: {
                    type: String,
                    defualt: ''
                },
            },
            data() {
                return {
                    styleName: "animation-duration: 6s",
                    scroll: false,
                    tipWidth: 0
                };
            },
            watch: {
                text: {
                    handler(val) {
                        this.textScroll()
                    },
                    immediate: false
                }
            },
            methods: {
                textScroll() {
                    // 等待节点挂载后再执行,热门线路tip滚动实现
                    this.$nextTick(() => {
                        let query = wx.createSelectorQuery().in(this)
                        query.select('.tip').boundingClientRect(data => {
                            this.tipWidth = data.width
                            console.log('tip', this.tipWidth)
                        }).exec();
                        query.select('.tip-inder').boundingClientRect(data => {
                            console.log('tip-inder', data.width)
                            if(data.width > this.tipWidth) {
                                let w = Number(data.width)
                                let time = Math.round(w / 40)
                                this.styleName = `animation-duration: ${time}s`
                                this.scroll = true
                            }
                        }).exec();
                    })
                }
            }
        };
    </script>
    
    <style lang="less">
        .tip {
            width: 100%;
            background: #f6f9ff;
            color: #4d82ff;
            font-size: 28rpx;
            height: 80rpx;
            line-height: 80rpx;
            overflow: hidden;
            box-sizing: border-box;
            white-space: nowrap;
        }
        
        .tip .inner {
            overflow: hidden;
            display: inline-block;
        }
    
        .tip .inner .tip-inder {
            white-space: nowrap;
            padding-left: 30rpx;
        }
    
        .tip .inner.move {
            // animation: move 6s infinite linear;
            animation-name: scroll;
            animation-timing-function: linear;
            animation-iteration-count: infinite;
        }
    
        @keyframes scroll {
            0% {
                transform: translateX(0);
            }
    
            100% {
                transform: translateX(-50%);
            }
        }
    </style>
    
    
    

    四、使用教程

    • vue页面使用
    <template>
        <text-scroll :text="boardRemark"></text-scroll>
    </template>
    
    import textScroll from '@/components/textScroll/index.vue'
    export default {
        components: { textscroll },
        data() {
            return {
                    boardRemark: '很长很长很长很长很长很长很长很长很长很长很长很长的文字'
          }
       }
    }
    

    相关文章

      网友评论

          本文标题:文字超出滚动 uni-app组件

          本文链接:https://www.haomeiwen.com/subject/denfwhtx.html