其實,在微信開放文檔中就有關于彈幕的組件。愛掏網 - it200.com當然,這是在我自己實現了彈幕功能后才發現的,不然我肯定不會自己動手實現,能白嫖絕不動手。愛掏網 - it200.com
實現彈幕功能最主要的點就是利用CSS3里面的動畫效果
/**定義從右邊向左邊的移動的動畫**/
@keyframes first {
from {
left: 100%;
}
?
to {
left: -200%;
}
}
有了這個動畫效果,實現彈幕效果非常簡單了
效果圖:
思路:
-
在wxml中添加節點
-
在wxss中添加動畫
-
在js中創建動畫對象
-
將動畫對象傳遞給wxml中的節點
//在wxml中添加節點
?
//在wxss中添加動畫
//注意彈幕必須得是Position:absolute下才能移動
.userDanmu_img {display: inline-block;vertical-align: top;height: 60rpx;width: 60rpx;border-radius: 30rpx;
}
?
.userDanmu_list {display: inline-block;vertical-align: top;font-size: 30rpx;height: 60rpx;line-height: 60rpx;padding: 0rpx 15rpx;
}
?
.aon {position: absolute;white-space: nowrap;/* 防止向下換行 */height: 60rpx;line-height: 60rpx;border-radius: 30rpx;background-color: rgba(0, 0, 0, 0.5);
}
?
/**定義從右邊向左邊的移動的動畫**/
/**注意下面這個to的left,如果你的彈幕非常長,
長到超過屏幕寬度,甚至有好幾倍那么長。愛掏網 - it200.com那么left
的值要設置為-300%甚至-500%,不然會出現彈幕停留在屏幕上的bug,
一般建議彈幕有字數限制**/
@keyframes first {from {left: 100%;}to {left: -200%;}
}
?
//在js中創建動畫對象
//利用工廠模式,每次彈幕創建一個對象并添加到list中去,簡單高效
function AddNewDanmu(danmu) {this.id = wx.getStorageSync('user_openId'),this.danmu = danmu,this.diplay = true,this.top = Math.ceil(Math.random() * 100),this.time = 10,this.color = com.getColor(),this.avatarUrl = wx.getStorageSync('user_avatarUrl')
}
?
function DanMu() {this.list = []
}
// 彈幕初始化 ==>在onload中執行
danmuInit() {this.setData({danmuList: new DanMu()})
}//將動畫對象傳遞給wxml中的節點onSubmit(e) {// 內容檢測 特3456書yuuo莞6543李zxcz蒜7782法fgnv級
if (e.detail.value.user_danmu.length !== 0) {wx.cloud.callFunction({name: 'setUserText',data: {content: e.detail.value.user_danmu}}).then(res => {console.log(res)if (res.result.errCode === 87014) {wx.showModal({title: '有違規內容',content: '檢測到您的內容中有違規內容,請重新編輯',success: res => {if (res.cancel) {this.setData({danmu: false})}}})} else {console.log(e.detail.value.user_danmu.length)let danmuList = this.data.danmuListdanmuList.list.push(new AddNewDanmu(e.detail.value.user_danmu))this.setData({danmuList: danmuList,danmu: false})}})
} else {this.setData({danmu: false})}}