相关疑难解决方法(0)

88
推荐指数
3
解决办法
10万
查看次数

使用纯(普通)JS 在画布的 X、Y 坐标处触发点击事件

<canvas id="MyCanvas" width="800" height="600"></canvas>
Run Code Online (Sandbox Code Playgroud)

我想模拟某个位置的点击(例如 x=200,y=150)。

var MyCanvas = document.getElementById('MyCanvas');
MyCanvas.click(200, 150);
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用。与下面稍加修改的相同:

var MyCanvas = document.getElementById('MyCanvas');
MyCanvas.click({pageX: 200, pageY: 150});
Run Code Online (Sandbox Code Playgroud)

...并使用从使用 javascript 模拟单击​​ x/y 坐标复制的以下代码。

function simulateClick(x, y) {
    var clickEvent = document.createEvent('MouseEvents');
    clickEvent.initMouseEvent(
        'click', true, true, window, 0,
        0, 0, x, y, false, false,
        false, false, 0, null
    );
    document.elementFromPoint(x, y).dispatchEvent(clickEvent);
}
simulateClick(200, 150);
Run Code Online (Sandbox Code Playgroud)

下面是基于上面代码的代码,但这也不起作用。

function simulateClick(x, y){
    document.elementFromPoint(x, y).click();
}
simulateClick(200, 150);
Run Code Online (Sandbox Code Playgroud)

最后一个代码也不会触发点击。

function simulateClick(targetCanvas, x, y) {
    var clickEvent = new MouseEvent(
        "click",
        { …
Run Code Online (Sandbox Code Playgroud)

javascript html5-canvas

7
推荐指数
1
解决办法
4668
查看次数

将鼠标事件调度到视觉上在接收元素"后面"的元素

在我的网页上,我有两个div,A和B:

在此输入图像描述

DOM看起来如下(简化).这里需要注意的主要问题是,div在DOM层次结构中处于同一级别,并且它们不按任何顺序排序.此外,外部div不仅包含A和B,还包含更多的div,C,D,E等.B可能不一定与A重叠.它也可能是C,位于A后面.

<div>
    <div style="...">B</div>
    <div style="...">A</div>
</div>
Run Code Online (Sandbox Code Playgroud)

单击处理程序附加到外部div,在冒泡阶段捕获A或B上的鼠标单击事件.单击进入A和B的交叉点将导致A上的单击事件,该事件会冒泡到我现在触发的单击处理程序.

现在的问题是:在某些条件下,处理程序决定该事件不应由A处理但应属于B.如果事件应由B处理,则将触发相同的单击处理程序,但事件对象currentTarget属性将为B代替.

我怎样才能做到这一点?

我已经看过JS中的css3指针处理程序和一些事件调度方法,但是在这里找不到解决方案.

可能的解决方案1(不兼容跨浏览器)?:

我想我可能会使用pointer-events css3属性.如果处理程序决定该事件应由B处理,则它将指针事件设置为无.然后,它重新触发鼠标点击.问题在于:是否可以仅使用坐标重新触发鼠标,而不指定特定元素?

无论如何,指针事件的支持是有限的:http://caniuse.com/pointer-events

javascript css css3

5
推荐指数
1
解决办法
1038
查看次数