视频播放器DPlayer全屏水印不显示?

作者站长头像
站长
· 阅读数 14

在h5中用视频播放器DPlayer监听竖屏和横屏(webfullscreen、fullscreen),更改水印范围,在竖屏的时候没问题,在横屏的时候看不到水印


/** 水印添加方法  */
 
let setWatermark = (str1, str2, container) => {
  let id = '1.23452384164.123412415';
  if (container === undefined) {
    return;
  }
  if (document.getElementById(id) !== null) {
    document.body.removeChild(document.getElementById(id));
  }
  // 设置局部水印
  var containerWidth = container.offsetWidth; // 获取父容器宽
  var containerHeight = container.offsetHeight; // 获取父容器高
  container.style.position = 'relative'; // 设置布局为相对布局
  var top = Math.random() * (containerHeight - 92);
  var left = Math.random() * (containerWidth - 548);
  let can = document.createElement('canvas');
  // 设置canvas画布大小
  can.width = 294;
  // can.width = 334;
  can.height = 90;
 
  let cans = can.getContext('2d');
  cans.rotate((-20 * Math.PI) / 180); // 水印旋转角度
  cans.font = '15px Vedana';
  // cans.font = '20px Vedana';
  cans.fillStyle = '#FFFF00  ';
  // cans.fillStyle = '#AAAAAA';
  // cans.textAlign = 'center';
  cans.border = '1px solid red';
  cans.textBaseline = 'Middle';
  cans.fillText(str1, can.width / 2, can.height); // 水印在画布的位置x,y轴
  cans.fillText(str2, can.width / 2, can.height + 22);
 
  let div = document.createElement('div');
  div.id = id;
  div.style.pointerEvents = 'none';
  div.style.top = top + 'px';
  div.style.left = left + 'px';
  div.style.opacity = '0.15';
  div.style.position = 'fixed';
  div.style.zIndex = '400000';
  div.style.width = '294px';
  // div.style.width = '394px';
  div.style.height = '90px';
  div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat';
  // document.body.appendChild(div);
  container.appendChild(div);
console.log('container', container);
 
 
  return id;
};
 
// 添加水印方法
export const setWaterMark = (str1, str2, container) => {
  let id = setWatermark(str1, str2, container);
  if (document.getElementById(id) === null) {
    id = setWatermark(str1, str2, container, isfullscreen);
  }
};
 
// 移除水印方法
export const removeWatermark = () => {
  let id = '1.23452384164.123412415';
  if (document.getElementById(id) !== null) {
    document.body.removeChild(document.getElementById(id));
  }
};
回复
1个回答
avatar
test
2024-07-03

原因: 我设置水印的时候,把画布放在document.body或传过来的container节点节点下, 由于视频播放器全屏的时候会置于最顶层,这是会把画布盖住解决方案:把视频元素节点跟画布放在同一层

<view
      class="video"
      id="directrecordwp"
    >
      <view id="dplayer"></view>
    </view>
  this.videoDp = new Dplayer({
        //播放器的一些参数
        container: document.getElementById('dplayer'),
        autoplay: true, //是否自动播放
        theme: '#65E1C0', //主题色
        loop: false, //视频是否循环播放
        lang: 'zh-cn',
        screenshot: false, //是否开启截图
        hotkey: false, //是否开启热键
        preload: 'auto', //视频是否预加载
        volume: 1, //默认音量
        mutex: false, //阻止多个播放器同时播放,当前播放器播放时暂停其他播放器
        video: {
           url: vm.videoUrl + vm.videoDetail.videoUrl, //视频地址
          type: 'customHls',
          customType: {
            customHls: function (video, player) {
              const hls = new Hls(); //实例化Hls  用于解析m3u8
              hls.loadSource(video.src);
              hls.attachMedia(video);
            },
          },
        },
      });

Watermark (设置水印方法)中的document.body.appendChild(div)改为document.getElementById('dplayer').appendChild(div)

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容