当前位置:   article > 正文

video标签的使用_video 标签

video 标签

记录工作中的问题

需求:播放前自定义图片,添加遮罩,添加暂停按钮, 且不显示功能区。点击播放开始显示功能区。左右切换视频需要乱序重排,隐藏掉转发,  点击回到顶部

左右切换: 

 

播放前:

开始播放:(这个暂停的时候在手机上中间位置实际是有那个三角的暂停键的, 电脑上不显示)

 

 

 代码

  1. <!-- 视频列表 -->
  2. <div class="main">
  3. <div
  4. v-for="(item, index) in tab_zy_img
  5. ? Arts
  6. : tab_zt_img
  7. ? special
  8. : tab_dsp_img
  9. ? sVideo
  10. : tab_vlg_img
  11. ? VLog
  12. : []"
  13. :key="item.id"
  14. class="box"
  15. >
  16. <p>{{ item.author }}</p>
  17. <div class="video_box">
  18. <!-- poster第一画面 controls播放按钮 autoplay="autoplay" autoplay自动播放 preload预加载 -->
  19. <!-- :controls="!item.showShade" -->
  20. <video
  21. :id="item.v_id"
  22. width="100%"
  23. height="100%"
  24. preload="auto"
  25. :controls="!item.showShade"
  26. :poster="item.poster"
  27. :src="item.v_url"
  28. playsinline
  29. webkit-playsinline
  30. x5-playsinline
  31. x5-video-player-fullscreen
  32. x5-video-orientation="portraint"
  33. ></video>
  34. <!-- 禁止ios在点击视频时自动全屏播放
  35. webkit-playsinline
  36. x5-playsinline
  37. x5-video-player-fullscreen
  38. x5-video-orientation="portraint" -->
  39. <!-- 蒙层 首次进入显示 -->
  40. <div v-if="item.showShade" class="video_z"></div>
  41. <!-- 暂停图标 首次进入显示 -->
  42. <div
  43. v-if="item.showZanTing"
  44. class="video_img"
  45. @click="playVideo(item, index)"
  46. ></div>
  47. <!-- 透明层 -->
  48. <div
  49. v-if="showVideoBac"
  50. class="video_bac"
  51. @click="playVideo(item, index)"
  52. ></div>
  53. </div>
  54. <p>{{ item.t_name }}</p>
  55. </div>
  56. </div>
  57. <!-- 返回顶部 -->
  58. <div class="footer"><button @click="toTop"></button></div>
  1. methods: {
  2. // 数组乱序
  3. randomArray (arr) {
  4. var stack = []
  5. while (arr.length) {
  6. //Math.random():返回 [0,1) 之间的一个随机数
  7. var index = parseInt(Math.random() * arr.length) // 利用数组长度生成随机索引值
  8. stack.push(arr[index]) // 将随机索引对应的数组元素添加到新的数组中
  9. arr.splice(index, 1) // 删除原数组中随机生成的元素
  10. }
  11. return stack
  12. },
  13. // 点击按钮返回顶部
  14. toTop () {
  15. var timer = null//时间标识符
  16. var isTop = true
  17. // 设置定时器
  18. timer = setInterval(function () {
  19. var osTop = document.documentElement.scrollTop || document.body.scrollTop
  20. //减小的速度
  21. var isSpeed = Math.floor(-osTop / 6)
  22. document.documentElement.scrollTop = document.body.scrollTop = osTop + isSpeed
  23. //判断,然后清除定时器
  24. if (osTop == 0) {
  25. clearInterval(timer)
  26. }
  27. isTop = true//添加在obtn.onclick事件的timer中
  28. }, 30)
  29. if (!isTop) {
  30. clearInterval(timer)
  31. }
  32. isTop = false
  33. },
  34. // 点击播放/暂停
  35. playVideo (item, index) {
  36. var video = document.getElementById(item.v_id)
  37. if (this.video != null && this.video != video) {
  38. // 上一个点过的视频未暂停直接点了下一个进行播放,此时将上一个视频暂停并添加暂停按钮
  39. this.video.pause()
  40. }
  41. // 记录上个点击的视频的信息
  42. this.video = video
  43. // 点击暂停/播放
  44. if (video.paused) {
  45. video.play()
  46. } else {
  47. video.pause()
  48. }
  49. },
  50. // 以下五步是将转发功能隐藏掉
  51. // 1.获取url
  52. getlocalUrl () {
  53. // 獲取 localurl
  54. this.localurl = location.href.split("#")[0]
  55. },
  56. // 2.生成16位随机码
  57. randomString () {
  58. // 生成16位隨機碼
  59. let len = 16
  60. let $chars = "ABCDEFGHJKMNPQefhijkmnprstwxyz234541425"
  61. let maxPos = $chars.length
  62. let pwd = ""
  63. for (var i = 0; i < len; i++) {
  64. pwd += $chars.charAt(Math.floor(Math.random() * maxPos))
  65. }
  66. this.noncestr = pwd
  67. },
  68. // 3.调接口
  69. getticket () {
  70. let appId = this.GetQueryString("appId")
  71. // eslint-disable-next-line no-undef
  72. axios.get("https://pmd.cctv.cn/cctvwx/getticket?appId=" + appId)
  73. .then((res) => {
  74. console.log(res, 'res')
  75. this.jsapi_ticket = res.data.ticket
  76. // 獲取 jsapi_ticket 生成簽名
  77. this.getSignature()
  78. }).catch((err) => { console.log(err) })
  79. },
  80. // 4.生成签名
  81. getSignature () {
  82. this.timestamp = new Date().getTime()
  83. let newString = `jsapi_ticket=${this.jsapi_ticket}&noncestr=${this.noncestr}&timestamp=${this.timestamp}&url=${this.localurl}`
  84. // eslint-disable-next-line no-undef
  85. let SHA1 = new Hashes.SHA1()
  86. this.signature = SHA1.hex(newString)
  87. // 初始化config
  88. this.initWxApi()
  89. },
  90. // 5. 初始化
  91. initWxApi () {
  92. wx.config({
  93. beta: true, // 调用wx.invoke形式的接口值时,该值必须为true。
  94. debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  95. appId: "ww0xxxxxxxxx", // 必填,企业微信的cropID
  96. timestamp: this.timestamp, // 必填,生成签名的时间戳
  97. nonceStr: this.noncestr, // 必填,生成签名的随机串
  98. signature: this.signature, // 必填,签名,见附录1
  99. jsApiList: [
  100. "hideWatermark",
  101. "showWatermark",
  102. "previewFile",
  103. "onRecordBufferReceived",
  104. "startRecordVoiceBuffer",
  105. "stopRecordVoiceBuffer",
  106. "hideOptionMenu",
  107. ], // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
  108. })
  109. // eslint-disable-next-line no-undef
  110. wx.checkJsApi({
  111. jsApiList: [
  112. "hideWatermark",
  113. "showWatermark",
  114. "previewFile",
  115. "onRecordBufferReceived",
  116. "startRecordVoiceBuffer",
  117. "stopRecordVoiceBuffer",
  118. ], // 需要检测的JS接口列表,所有JS接口列表见附录2,
  119. success: function () {
  120. // console.log(res);
  121. },
  122. })
  123. wx.ready(function () {
  124. console.log('隐藏转发')
  125. wx.hideOptionMenu()
  126. })
  127. wx.error(function (res) {
  128. console.log(res)
  129. })
  130. },
  131. },
  132. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/175235
推荐阅读
相关标签
  

闽ICP备14008679号