微信小程序中不定长度的滚动字幕效果---wxss中使用js变量

1、滚动字幕的效果,文字是动态加载的,长度是不定。

2、利用 animation 写个动画好写,但是animation中需要文字滚动位移的距离,transform: translateX(200px);但是由于文字的长度不知道,200px到底是多少呢?不确定。

3、原生js的写法,肯定就是操作dom对象,利用document.get.......获取dom对象,获取文字的宽度,利用文字的宽度,减去父元素可以显示的宽度,就是需要滚动的距离了。

4、在微信小程序中,没有dom对象,获取部分dom信息需要使用 boundingClientRect 方法

        let companyWidth = 0
        let prjDeptWidth = 0
        let detailsWidth = 0
        const query = wx.createSelectorQuery()
        query.select('#company').boundingClientRect()
        query.exec(function (res) {
            companyWidth = res[0].width
        })
        const query1 = wx.createSelectorQuery()
        const query2 = wx.createSelectorQuery()
        query1.select('#prjDept').boundingClientRect()
        query1.exec(function (res) {
            prjDeptWidth = res[0].width
        })
        query2.select('#detailsWidth').boundingClientRect()
        query2.exec(function (res) {
            detailsWidth = res[0].width
        })

5、公司距离的变化就是   文字的长度 - 父元素的宽度

           // 公司名称变化的距离
            const conpanyPositionWidth = `translateX(-${ companyWidth - detailsWidth + 5}px)`
            // 公司部门变化的距离
            const prjDeptPositionWidth = `translateX(-${ prjDeptWidth - detailsWidth + 5}px)`
            that.setData({
                conpanyPositionWidth,
                prjDeptPositionWidth
            })

6、数据知道了,接下来就是把data中的数据放在wxss中。在wxml里面

<view class="details-cont">
                    <view id="prjDept" wx:if="{{flagAnimate}}" style="--prjDeptPositionWidth--:{{prjDeptPositionWidth}};--setPrjDeptTime--:{{setPrjDeptTime}}" class="animatePrjDept">
                        {{userHealthData.prjDept}}
                    </view>
                </view>

7、请仔细看  --prjDeptPositionWidth--:{{prjDeptPositionWidth}};  写在style中,然后

8.在wxss页面中,这样使用

.animatePrjDept {
    position: absolute;
    left: 0;
    top: 0;
    white-space:nowrap;
    height: 36rpx;
    animation: var(--setPrjDeptTime--);
}
@keyframes wordsLoopPrjDept {
    0% {
        transform: translateX(0);
    }
    50% {
        transform: var(--prjDeptPositionWidth--);
    }
    100% {
        transform: translateX(0);
    }
}

最后看看控制台中显示的数据

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值