4353关注12439浏览
我的想法:我要用 danmu-list 做一个动态的视频弹幕
思路:我通过 bindtimeupdate 这个事件,一直在监听当前视频的进度,来获取弹幕的发送时间,从而把弹幕显示在视频上,我中间给了2s的延迟,在我监听到当前视频进度秒的时候,会向上取整,并且加2s作为弹幕在视频上的显示时间。让用户输入文字后,点击发送,我会构建一个数组,对 danmu-list 进行setdata,重新渲染页面。
问题:这样的写法在模拟器上没有任何问题,但是在手机端会出先失效、混乱的问题
手机设备:Android 华为 V9
手机端出现的问题:
1:当这个视频之前没有任何弹幕的时候,在手机端进行操作,可以把输入的弹幕显示在视频上,但是每次显示最新一条的时候,会把上一条的弹幕内容带上。
2:当这个视频存在弹幕的时候,也就是本身具有弹幕列表了,然后再进行操作,这个时候手机端输入文字,不能显示到视频列表中,只要把视频暂停后,然后拖回之前的时间,再进行一次播放,方可显示出来。
猜想:
我自己调试了很长时间,做了好几种假设,比如是否是我延迟时间给的太短,是否是数组的顺序不对。但是我发现都不是这些问题,最后,我再想,是否是setdata后 setdata进行页面渲染的时候,在手机端因为计算能力没电脑那么强,所以渲染的时间比较长,会让我错过弹幕该显示的时间点。如果是这个样子,我想请求告诉我,小程序setdata后 在自己渲染页面的时候会使用多久的时间才能完全渲染完,这样我就知道我改如何去控制用户在一定的时间范围内,才能发送弹幕。
代码:
wxml
<view class="vid">
<video class='videos' id="myVideo" src='{{ImageServiceUrl+param.url}}' controls='controls' autoplay="true" poster="{{ImageServiceUrl+param.pic}}" objectFit="fill" danmu-list="{{danmu_list}}" danmu-btn="true" enable-danmu="true" bindtimeupdate="VideoChange"></video>
</view>
<scroll-view scroll-y="true" class='list' style='height:{{windowHeight-260}}px;' scroll-into-view="{{Toview}}">
<view class='list1' id='ID-{{index}}' wx:for="{{danmu_list}}" wx:key="itme">
<text style='color:#9b9b9b;'>{{item.name}}-{{item.time}}:</text>
<text style='color:#000;'>{{item.text}}</text>
</view>
</scroll-view>
<view class='inps'>
<form bindreset="formReset">
<input class='skl' id='DanMuContentID' placeholder='说点什么吧。。' adjust-position="false" bindinput="CompleteContent" confirm-type="发送" ></input>
<button class='send' wx:if="{{!user_info}}" bindgetuserinfo='SendContentH' open-type="getUserInfo" form-type='reset'>发送</button>
<button class='send' wx:if="{{user_info}}" bindtap='SendContentQ' form-type='reset' >发送</button>
</form>
</view>
JS:
// pages/video/play_video.js
const app = getApp()
Page({
/**
&
-
至过去的我
2044人对此回答表示赞同
我是未来的你,你现在是不是在年找寻小程序答案。你不要感觉诧异,给你来信原因,就是让你不在后悔。今天去学习如何推广小程序,相信......点击查看更多> -
Jasper
18人对此回答表示赞同
我今天发现newDate(),在小程序真机打印出来的时间和在模拟器上打印出来的时间差几个小时,你有这种情况么?百思不得其解。
展开180回复分享发布于 6年前评论(0)
收起评论
-
Luis
16人对此回答表示赞同
我用过sendDanmu这个API来发送弹幕,但是这个API很不稳定,容易发不出来
展开160回复分享发布于 6年前评论(0)
收起评论
-
祖师爷
8人对此回答表示赞同
我也是在添加bindtimeupdata事件后,弹幕出现错乱的问题,不监听这个事件是没有问题的,但存储弹幕的时候又需要这个时间戳,主怎么解决的
展开80回复分享发布于 6年前评论(0)
收起评论
-
吴怡然
7人对此回答表示赞同
麻烦给个相关的代码片段,我们定位下问题
展开70回复分享发布于 6年前评论(0)
收起评论
-
Natalie
3人对此回答表示赞同
@主,你可以尝试一下使用sendDanmu这个api来发送弹幕,而不是setData
展开30回复分享发布于 6年前评论(0)
收起评论
-
Frederick富坚
3人对此回答表示赞同
@你剑哥,我还真没注意这种情况,谢谢提醒,我自己测试下
展开30回复分享发布于 6年前评论(0)
收起评论