问题可能听起来非常非常糟糕,但我不想在没有用户想要的情况下打开视频。我想用来自用户的物理交互以外的东西打开视频,例如通过摇动设备。我正在使用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创建触摸事件。