微信小程序實現(xiàn)跑馬燈效果
網(wǎng)上很多實現(xiàn)跑馬燈的文章,但是很多發(fā)現(xiàn)都是不行的,之一就是文字寬度居然是通過字符數(shù)*文字size計算,明顯是不準確的計算方式。我看了下,發(fā)現(xiàn)可以通過計算控件寬度來精確計算文字寬度,這樣實現(xiàn)的跑馬燈是比較完善的。
效果如下:

實現(xiàn)代碼如下:
wxml:
<view class="rollCon">
<view class='box'>
<view class='text'style='left:{{offsetLeft}}px' >{{text}}</view>
</view>
</view>
wxss:
.rollCon {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 60rpx;
z-index: 100;
background: #fde8c7;
font-size: 20rpx;
line-height: 60rpx;
}
.box {
width: 100%;
position: relative;
}
.text {
white-space: nowrap;
position: absolute;
top: 0;
font-size: 24px;
}
js:
Page({
/**
* 頁面的初始數(shù)據(jù)
*/
data: {
interval: null,
text: '995年JavaScript誕生時如早一年',
pace: 1.2, //滾動速度
interval: 20, //時間間隔
size: 24, //字體大小in px
length: 0, //字體寬度
offsetLeft: 0, //
windowWidth: 0,
},
//根據(jù)viewId查詢view的寬度
queryViewWidth: function(viewId) {
//創(chuàng)建節(jié)點選擇器
return new Promise(function(resolve) {
var query = wx.createSelectorQuery();
var that = this;
query.select('.' + viewId).boundingClientRect(function(rect) {
resolve(rect.width);
}).exec();
});
},
//停止跑馬燈
stopMarquee: function() {
var that = this;
//清除舊的定時器
if (that.data != null) {
clearInterval(that.interval);
}
},
//執(zhí)行跑馬燈動畫
excuseAnimation: function() {
var that = this;
if (that.data.length > that.data.windowWidth) {
//設置循環(huán)
let interval = setInterval(function() {
if (that.data.offsetLeft <= 0) {
if (that.data.offsetLeft >= -that.data.length) {
that.setData({
offsetLeft: that.data.offsetLeft - that.data.pace,
})
} else {
that.setData({
offsetLeft: that.data.windowWidth,
})
}
} else {
that.setData({
offsetLeft: that.data.offsetLeft - that.data.pace,
})
}
}, that.data.interval);
}
},
//開始跑馬燈
startMarquee: function() {
var that = this;
that.stopMarquee();
//初始化數(shù)據(jù)
that.data.windowWidth = wx.getSystemInfoSync().windowWidth;
that.queryViewWidth('text').then(function(resolve) {
that.data.length = resolve;
console.log(that.data.length + "/" + that.data.windowWidth);
that.excuseAnimation();
});
}
})
源碼下載:跑馬燈效果
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
小程序與內(nèi)嵌webview的數(shù)據(jù)交互方案詳解
這篇文章主要介紹了小程序與內(nèi)嵌webview的數(shù)據(jù)交互方案,為實現(xiàn)H5頁面到小程序的無縫切換,技術方案包含使用webview交互,特別是低碼C端表單頁面的處理,需要的朋友可以參考下2024-09-09
JavaScript作用域、閉包、對象與原型鏈概念及用法實例總結
這篇文章主要介紹了JavaScript作用域、閉包、對象與原型鏈,結合實例形式總結分析了javascript中變量與函數(shù)的作用域、閉包、對象、原形鏈相關概念、用法及注意事項,需要的朋友可以參考下2018-08-08
動態(tài)的改變IFrame的高度實現(xiàn)IFrame自動伸展適應高度
動態(tài)的改變IFrame的高度,實現(xiàn)IFrame自動伸展,父頁面也自動神縮原理: 在IFrame子頁面一加載的時候,調(diào)用父IFrame對象,改變其高度2012-12-12
JavaScript代碼輕松實現(xiàn)網(wǎng)頁內(nèi)容禁止復制(代碼簡單)
有些時候我們寫的內(nèi)容不想被別人復制,在代碼中怎么實現(xiàn)的呢?下面小編給大家介紹javascript代碼輕松實現(xiàn)網(wǎng)頁內(nèi)容禁止復制,感興趣的童鞋一起看看吧2015-10-10

