前端小白一枚,经由过程打仗一段时间的 weex,谈下本身的主意和个中遇到的题目
如今先来说下遇到的题目:
在一个页面中是 video 列表,要依据转动来掌握该哪一个视频来播放
tab 页面内里有差别的数据列表,各个 tab 页面的革新和加载状况没法重置题目
….
遇到的两个大的题目,内里另有诸多的小题目
献上处理办法:
依据 weex 内里 video 标签和 weex 的 appear
和 disappear
通用事宜来处理的,内里的具体内容,人人能够看这里:
http://weex.apache.org/refere…
贴出代码:
使用到 osc-video.vue 的文件
<div v-for="(item,index) in videos" class="videos-wrapper">
<osc-video :item="item" @score_change="score_change"></osc-video>
</div>
osc-video.vue
<video class="video" :src="item.type_data.video_url"
:playStatus="playStatus"
:autoPlay="autoPlay"
@click="show_video_time=!show_video_time">
</video>
<div class="control-play control-play-first" @appear="onappear" @disappear="ondisappear"></div>
<div class="control-play control-play-second" @appear="onappear" @disappear="ondisappear"></div>
<div class="control-play control-play-third" @appear="onappear" @disappear="ondisappear"></div>
<div class="control-play control-play-four" @appear="onappear" @disappear="ondisappear"></div>
<div class="control-play control-play-five" @appear="onappear" @disappear="ondisappear"></div>
设置得分数
js:data(){return {score: 0,autoPlay:autoPlay,paly_direction:null}}
methods:{
onappear(e){
this.paly_direction=e.direction
this.score += 20;
this.notify_score_changed();
},
//依据appear和disappear触发score_change
notify_score_changed:function(){
this.$emit("score_change",this);
},
ondisappear(e){
this.paly_direction=e.direction
this.score -= 20
this.notify_score_changed();
}
},
在mounted中监听播放事宜
mounted(){
this.$on("play",(e)=>{
this.playStatus=e
})
}
在父组件中,先建立寄存得分数的数组 score_item
和当前应该播放的视频的current_play
:
data(){score_time:[],current_play:null},
methods:{
createscorelist:function(obj){
let nIndex = this.score_item.indexOf(obj) ;
console.log("score changed: " + obj.score)
if(obj.score == 0)
{
if(nIndex >= 0)
{
this.score_item.splice(nIndex,1)
}
}
if(nIndex< 0){
/// TODO, scroll up /down
/// 刚进入video列表没有转动时 会以为play_direction是undefined
if(obj.paly_direction==undefined || obj.paly_direction=="up" ) {
this.score_item.push(obj)
}else{
this.score_item.unshift(obj)
}
}
console.log("score arr:" + nIndex + " length:" + this.score_item.length)
},
controlPlay(){
let score_high = 0;
let might_play = null
for(let i=0;i<this.score_item.length;i++){
let v=this.score_item[i]
if(v.score > score_high){
score_high = v.score
might_play = v
}
}
// console.log("current score:" + score_high)
if(this.current_play == might_play){
return
}
if(this.current_play != null){
this.current_play.$emit('play', 'pause')
}
this.current_play = might_play
this.current_play.$emit('play', 'play')
},
score_change(e){
this.createscorelist(e)
this.controlPlay();
}
}
至此视频列表能够转动播放, 当满环欣喜的去看时 ,却又发明了一个题目, 是在数据刚进入页面以后, 视频不会自动的播放, 然则当上拉或许下拉以后, 视频才能够播放,
厥后发明是因为数据还没有加载胜利,播放状况的值没法去举行设置,找到了处理方法:在进入页面以后,推断一下播放的状况,然后在设置自动播放。
在 video 组建中增添属性 autoPlay:autoPlay
以及在监听事宜 play 中增添为
mounted(){
this.$on("play",(e)=>{
this.playStatus=e
if(e=="play"){
this.autoPlay=play
}else{
this.autoPlay=pause
}
})
},
如今这个题目已处理终了,后续会增添上第二个题目的处理方案。
打仗以后的主意:最先原本想着做三端一致的,然则在厥后开辟中遇到不少的坑,很难做到一套模板,三端通用,就舍弃了 web 端 只专注 android 和 ios,如今项目还在举行中,后续遇到的题目和处理方案也会加进来。
逐步举行,爬坑之旅,
《–愿望人人多多指导–》