vue v-on:绑定error事件后一直不触发
   
    
    
    项目场景:
   
    
     视频播放失败时用外链打开(或者其他视频加载失败后的处理)
    
   
<video :id="item.uid" width="200" height="150"  controls="controls"  preload="none" :poster="item.coverUrl" @error="videoLoadError(item)">
  <source  :src="videoUrlHeader+item.awemeId+'.mp4'" type="video/mp4">
  <p>的浏览器不支持 HTML5 视频,请下载 <a :href="videoUrlHeader+item.awemeId+'.mp4'">视频文件</a></p>
</video>
//js部分
videoLoadError(item){
  this.$message({
    message: '视频加载失败,即将通过源地址查看',
    type: 'error',
    duration:2000,
    onClose:()=>{
      this.openNewWindow(item.awemeId)
    }
  });
},
    
    
    原因分析:
   
    
     step1:看了些网上的用法尝试换成:error绑定,直接 :error=“videoLoadError(item)”,结果就是每一次都会触发,无论视频加载成功与否;有点瞎试
     
     
    
   
    step2:加上其他可正常触发的方法,比如onplay,或者 addEventListener(‘error’),,发现onplay还有原本的error方法是可以看到在dom上绑定成功的;
    
     
   
step3: v-on:方法肯定是没问题的 然后重新仔细看了h5文档说明,注意到了 ; 绑定的src在哪里 error方法就放哪里 不然怎么知道加载失败呢!!
< source > 标签作为媒介标签,本身就也有error等其他事件属性
    
    
    正确用法:
   
<!-html-->
<video :id="item.uid" width="200" height="150"  controls="controls"  preload="none" :poster="item.coverUrl"
      @error.prevent="videoLoadError(item)"  :src="videoUrlHeader+item.awemeId+'.mp4'">
  <!--<source  :src="videoUrlHeader+item.awemeId+'.mp4'" type="video/mp4">-->    <!-就是这里!!src在这里error方法在video上,error就不可能触发到啊!!-->
  <p>的浏览器不支持 HTML5 视频,请下载 <a :href="videoUrlHeader+item.awemeId+'.mp4'">视频文件</a></p>
</video>
或者:
<!-html-->
<video  :id="item.uid" width="200" height="150"  controls="controls"  preload="none" :poster="item.coverUrl" @play="playVideo(item)">
  <source :src="videoUrlHeader+item.awemeId+'.mp4'"  type="video/mp4"    @error.prevent="videoLoadError(item)"  >
  <p>的浏览器不支持 HTML5 视频,请下载 <a :href="videoUrlHeader+item.awemeId+'.mp4'">视频文件</a></p>
</video>
    
     问题描述:
    
   
    
    
    视频播放失败后无法再次点击播放(初期数据源不稳定,需求需要可以重复点击不管URL是否能播放)
   
//解决方案 失败后重新设置src
videoLoadError(item){
	let myVideo=document.getElementById(item.uid);
  myVideo.src=item.src;  
},
    注意: 既有error属性也有error方法,二者不要搞混了瞎用;
    
    error 属性返回一个 MediaError 对象,MediaError 对象的 code 属性包含了音频/视频的错误状态。
    
    < source > 标签作为媒介标签,本身就也有error等其他事件属性
   
 
版权声明:本文为for_story原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
