video标签的使用

记录工作中的问题

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

左右切换: 

 

播放前:

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

 

 

 代码

      <!-- 视频列表 -->
      <div class="main">
        <div
          v-for="(item, index) in tab_zy_img
            ? Arts
            : tab_zt_img
            ? special
            : tab_dsp_img
            ? sVideo
            : tab_vlg_img
            ? VLog
            : []"
          :key="item.id"
          class="box"
        >
          <p>{{ item.author }}</p>
          <div class="video_box">
            <!-- poster第一画面 controls播放按钮 autoplay="autoplay"  autoplay自动播放 preload预加载 -->
            <!-- :controls="!item.showShade" -->
            <video
              :id="item.v_id"
              width="100%"
              height="100%"
              preload="auto"
              :controls="!item.showShade"
              :poster="item.poster"
              :src="item.v_url"
              playsinline
              webkit-playsinline
              x5-playsinline
              x5-video-player-fullscreen
              x5-video-orientation="portraint"
            ></video>

            <!-- 禁止ios在点击视频时自动全屏播放
              webkit-playsinline
              x5-playsinline
              x5-video-player-fullscreen
              x5-video-orientation="portraint" -->

            <!-- 蒙层 首次进入显示 -->
            <div v-if="item.showShade" class="video_z"></div>
            <!-- 暂停图标 首次进入显示 -->
            <div
              v-if="item.showZanTing"
              class="video_img"
              @click="playVideo(item, index)"
            ></div>
            <!-- 透明层 -->
            <div
              v-if="showVideoBac"
              class="video_bac"
              @click="playVideo(item, index)"
            ></div>
          </div>
          <p>{{ item.t_name }}</p>
        </div>
      </div>
      <!-- 返回顶部 -->
      <div class="footer"><button @click="toTop"></button></div>

  methods: {

    // 数组乱序
    randomArray (arr) {
      var stack = []
      while (arr.length) {
        //Math.random():返回 [0,1) 之间的一个随机数
        var index = parseInt(Math.random() * arr.length)  // 利用数组长度生成随机索引值
        stack.push(arr[index])  // 将随机索引对应的数组元素添加到新的数组中
        arr.splice(index, 1)  // 删除原数组中随机生成的元素
      }
      return stack
    },

    // 点击按钮返回顶部
    toTop () {
      var timer = null//时间标识符
      var isTop = true

      // 设置定时器
      timer = setInterval(function () {
        var osTop = document.documentElement.scrollTop || document.body.scrollTop
        //减小的速度
        var isSpeed = Math.floor(-osTop / 6)
        document.documentElement.scrollTop = document.body.scrollTop = osTop + isSpeed
        //判断,然后清除定时器
        if (osTop == 0) {
          clearInterval(timer)
        }
        isTop = true//添加在obtn.onclick事件的timer中    
      }, 30)
      if (!isTop) {
        clearInterval(timer)
      }
      isTop = false
    },

    // 点击播放/暂停
    playVideo (item, index) {
      var video = document.getElementById(item.v_id)
      if (this.video != null && this.video != video) {
        // 上一个点过的视频未暂停直接点了下一个进行播放,此时将上一个视频暂停并添加暂停按钮
        this.video.pause()
      }
      // 记录上个点击的视频的信息
      this.video = video


      // 点击暂停/播放
      if (video.paused) {
        video.play()
      } else {
        video.pause()
      }
    },


    // 以下五步是将转发功能隐藏掉 
    // 1.获取url
    getlocalUrl () {
      // 獲取 localurl
      this.localurl = location.href.split("#")[0]
    },
    // 2.生成16位随机码
    randomString () {
      // 生成16位隨機碼
      let len = 16
      let $chars = "ABCDEFGHJKMNPQefhijkmnprstwxyz234541425"
      let maxPos = $chars.length
      let pwd = ""
      for (var i = 0; i < len; i++) {
        pwd += $chars.charAt(Math.floor(Math.random() * maxPos))
      }
      this.noncestr = pwd
    },
    // 3.调接口
    getticket () {
      let appId = this.GetQueryString("appId")
      // eslint-disable-next-line no-undef
      axios.get("https://pmd.cctv.cn/cctvwx/getticket?appId=" + appId)
        .then((res) => {
          console.log(res, 'res')
          this.jsapi_ticket = res.data.ticket
          // 獲取 jsapi_ticket 生成簽名
          this.getSignature()
        }).catch((err) => { console.log(err) })
    },
    // 4.生成签名
    getSignature () {
      this.timestamp = new Date().getTime()
      let newString = `jsapi_ticket=${this.jsapi_ticket}&noncestr=${this.noncestr}&timestamp=${this.timestamp}&url=${this.localurl}`
      // eslint-disable-next-line no-undef
      let SHA1 = new Hashes.SHA1()
      this.signature = SHA1.hex(newString)
      // 初始化config
      this.initWxApi()
    },
    // 5. 初始化
    initWxApi () {
      wx.config({
        beta: true, // 调用wx.invoke形式的接口值时,该值必须为true。
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: "ww0xxxxxxxxx", // 必填,企业微信的cropID
        timestamp: this.timestamp, // 必填,生成签名的时间戳
        nonceStr: this.noncestr, // 必填,生成签名的随机串
        signature: this.signature, // 必填,签名,见附录1
        jsApiList: [
          "hideWatermark",
          "showWatermark",
          "previewFile",
          "onRecordBufferReceived",
          "startRecordVoiceBuffer",
          "stopRecordVoiceBuffer",
          "hideOptionMenu",
        ], // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
      })

      // eslint-disable-next-line no-undef
      wx.checkJsApi({
        jsApiList: [
          "hideWatermark",
          "showWatermark",
          "previewFile",
          "onRecordBufferReceived",
          "startRecordVoiceBuffer",
          "stopRecordVoiceBuffer",
        ], // 需要检测的JS接口列表,所有JS接口列表见附录2,
        success: function () {
          // console.log(res);
        },
      })

      wx.ready(function () {
        console.log('隐藏转发')
        wx.hideOptionMenu()
      })
      wx.error(function (res) {
        console.log(res)
      })
    },
  },
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值