小程序之文字公告水平无缝滚动

小程序,直接没了dom的操作,没想到法子怎么搞。顺路就去搜罗各种实现,但都不尽满意,所以就试着自己去搞个,直接用 canvas 画了。

这是原生版的 canvas 无缝实现:

https://jsfiddle.net/lyplba/6...

不过因为小程序魔改过各种原生API,是贴代码吧:

wx.getSystemInfo({
    success: function (res) {
        let message = '创建 canvas 绘图上下文(指定 canvasId)。在自定义组件下,第二个参数传入组件实例this,以操作组件内 <canvas/> 组件';
        let movement = 0;
        let ctx = wx.createCanvasContext("marqueeCanvas");
        ctx.setFontSize(14); // 要写在外面,不然会导致计算总长度时候采用默认字号
        let messageWidth = ctx.measureText(message).width;
        let tid = setInterval(function () {
            ctx.clearRect(0, 0, res.screenwidth, 32);
            ctx.fillRect(0, 0, res.screenwidth, 32);
            ctx.setFillStyle('#c29a63');
            ctx.fillText(message + message, movement, 21);
            ctx.draw();

            movement -= 1;

            if (Math.abs(movement) === messageWidth) {
                movement = 0;
            }
        }, 1000 / 60);
    }
});

样式:

canvas {
    display: block;
    width: 100%;
    height: 32px;
    font-size: 14px;
    color: #c29a63;
    background-color: #fbf7e9;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
小程序文字走马灯可以通过使用 `scroll-view` 组件实现。具体实现步骤如下: 1. 在 `wxml` 文件中添加 `scroll-view` 组件,并设置 `scroll-x` 属性为 `true`,表示横向滚动。 ```html <scroll-view scroll-x="true" class="scroll-view"> <!-- 文字内容 --> <text>这是一条信息</text> <text>这是另外一条信息</text> <text>这是第三条信息</text> <!-- ... --> </scroll-view> ``` 2. 在 `wxss` 文件中给 `scroll-view` 组件添加样式,使其占据整个屏幕宽度,并隐藏水平滚动条。 ```css .scroll-view { width: 100%; overflow-x: hidden; } ``` 3. 在 `js` 文件中监听 `scroll-view` 组件的滚动事件,并设置一个定时器,每隔一定时间让 `scroll-view` 组件向左滚动一个固定宽度的距离(即一条信息的宽度)。 ```javascript Page({ data: { scrollLeft: 0, // scroll-view 组件的滚动距离 interval: 2000, // 定时器间隔时间,单位为毫秒 animationDuration: 500 // 滚动动画执行时间,单位为毫秒 }, onLoad: function () { // 获取 scroll-view 组件的宽度 wx.createSelectorQuery().select('.scroll-view').boundingClientRect((rect) => { this.setData({ scrollViewWidth: rect.width }) }).exec() // 开启定时器 setInterval(() => { // 计算下一次滚动的距离 const nextScrollLeft = this.data.scrollLeft + this.data.scrollViewWidth // 执行滚动动画 this.setData({ scrollLeft: nextScrollLeft, animationDuration: 500 }) setTimeout(() => { // 将滚动距离重置为 0,实现循环滚动 this.setData({ scrollLeft: 0, animationDuration: 0 }) }, this.data.animationDuration) }, this.data.interval) } }) ``` 通过以上步骤,就可以实现小程序文字走马灯的效果了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值