如何在没有用户的物理输入(触摸)的情况下强制播放HTML5视频

时间:2015-08-28 00:31:51

标签: javascript html5 javascript-events

问题可能听起来非常非常糟糕,但我不想在没有用户想要的情况下打开视频。我想用来自用户的物理交互以外的东西打开视频,例如通过摇动设备。我正在使用iPhone6 +目前使用safari 8.x。

我真的不知道物理点击和模拟点击之间是否存在任何差异,我认为有,但this question说的恰恰相反。无论如何,在过去的两个小时里,我尽力从物理点击中复制事件数据,但它可能是正确的方法。

这就是我所拥有的:

<video width="320" height="240" preload="auto" controls>
  <source src="./img/video.mp4" type="video/mp4"></source>
  Your browser does not support the video tag.
</video>

我在摇动设备时所做的是:

document.querySelector("video").play();

仅当视频首先由用户播放时才有效,否则无法正常播放。所以我想模拟一个触摸事件来伪造用户输入,我创建了一个按钮,当点击它时打开视频就像上面的方式。按钮的原因:我无法触摸事件点击视频播放。

<button>play</button>

现在,我希望通过以下方式触发此触摸事件按钮(不用说,我也尝试使用常见的点击事件和document.querySelector("button").click();但没有成功)。

document.querySelector("button").addEventListener("touchstart", function(e){
  document.querySelector("video").play();
});

注意:如果我实际触摸按钮,则此(上图)有效。所以,这就是我想模拟触摸事件的原因:

触摸活动创建者:

function click(el) {
  var cancelled = false;

  var evt = document.createEvent("TouchEvent");
  var t = {
    view: window, 
    target: document.querySelector("button"), 
    identifier: 1617692871, 
    pageX: 183, 
    pageY: 303,
    screenX: 183, 
    screenY: 303, 
    clientX: 183, 
    clientY: 303,
    radiusX: 1, 
    radiusY: 1, 
    rotationAngle: 0.0, 
    force: 1
  };
  var touch = document.createTouch(t.view, t.target, t.identifier, t.pageX, t.pageY, t.screenX, t.screenY, t.clientX, t.clientY, t.radiusX, t.radiusY, t.rotationAngle, t.force);
  console.log(touch);
  var o = {
    type: "touchstart",
    bubbles: true,
    cancelable: true,
    view: window,
    detail: 1,
    screenX: 0,
    screenY: 0,
    clientX: 0,
    clientX: 0,
    ctrlKey: false,
    altKey:  false,
    shiftKey:  false,
    metaKey:  false,
    touches: document.createTouchList(touch),
    targetTouches: document.createTouchList(touch),
    changedTouches: document.createTouchList(touch),
    scale: 1.0,
    rotation: 0.0
  };
  evt.initTouchEvent(o.type, o.bubbles, o.cancelable, o.view, o.detail, o.screenX, o.screenY, o.clientX, o.clientY, o.ctrlKey, o.altKey, o.shiftKey, o.metaKey, o.touches, o.targetTouches, o.changedTouches, o.scale, o.rotation);
  cancelled = !el.dispatchEvent(evt);
}

然后,让我们说,摇一摇(忽略摇动代码,它有效)我也尝试通过控制台手动执行点击功能:

click(document.querySelector("button"));

Resource创建触摸事件。

0 个答案:

没有答案