- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
不确定我可能做错了什么,但我试图通过给它一个 X 和 Y 值来模拟点击事件。
这是我的代码
var clickEvent = document.createEvent('MouseEvent'),
DOMbody = document.getElementsByTagName("body")[0],
testX = targetJoint.depthX * DOMbody.clientWidth,
testY = DOMbody.clientHeight - (targetJoint.depthY * DOMbody.clientHeight);
clickEvent.pageX = testX;
clickEvent.pageY = testY;
if (counter < 5000) {
counter++;
console.log('testX: ' + testX);
console.log('testY: ' + testY);
console.log('click event X: ' + clickEvent.pageX);
console.log('click event Y: ' + clickEvent.pageY);
}
//}
clickEvent.initEvent(eventType, true, true);
node.dispatchEvent(clickEvent);
我在哪里得到 testX
和 testY
是无关紧要的。它来自 Kinect 数据,控制台日志如下所示:
testX: 701.220
testY: 290.693
click event X: 0
click event Y: 0
testX: 704.132
testY: 291.669
click event X: 0
click event Y: 0
testX: 689.852
testY: 284.198
click event X: 0
click event Y: 0
那么,为什么明明明明设置了正确的值却还是 0 呢?
编辑:虽然这不是我要返回的真正相同的数据,但不可能用输入的 kinect 数据重新创建一个 fiddle 。在 fiddle 上做了这个粗略的例子。至少显示点击事件 pagex/y 为 0,即使我明确设置它(无论出于何种原因在 fiddle 上 testY
也是 0,但是 testX
不是并且 clickEvent.pageX
是 0)
最佳答案
我做了一些研究,发现用于创建事件的 MDN 文档有一些漏洞,因为它似乎没有显示用于模拟鼠标事件的可靠的跨浏览器解决方案。
无论如何,我发现有一些方法可以创建 MouseEvent
实例:
使用 document.createEvent
:
var mouseEvent = document.createEvent('MouseEvent');
mouseEvent.initMouseEvent('click', true, true, window, 1, 100, 100, 100, 100);
这不仅创造了.clientX
和 .clientY
, 还有 pageX
和 pageY
然而,as it's stated in the documentation , .initMouseEvent
已弃用。
使用 MouseEvent
构造函数:
var mouseEvent = new MouseEvent('click', {
clientX: 100,
clientY: 100
});
MouseEvent
不支持 pageX
和 pageY
属性,它也是 not supported by Internet Explorer
在MouseEvent
构造函数文档,它说对于不支持 MouseEvent
的浏览器构造函数,this polyfill应该使用,它当前正在使用 document.createEvent('MouseEvent')
创建事件并使用已弃用的 .initMouseEvent
初始化它的方法...
我不明白的是,polyfill 不接受除 .bubbles
之外的所有属性的参数。 和 .cancelable
(即:.screenX
、.screenY
、.clientX
和 .clientY
也不被接受),如果你使用 polyfill,你应该添加你需要的属性,这样做你只需要检查如何.bubbles
和 .cancelable
正在设置属性。
所以最终的解决方案应该是使用那个 polyfill (我没有在这里展示,因为它可以稍后更改) 然后通过实例化创建方法MouseEvent
:
// vars
var counter = 0,
DOMfoo = document.getElementById('foo'),
targetJoint = {
depthX: 0.5,
depthY: 0.3,
};
// functions
function simulateEvent (eventType, node) {
var DOMbody = document.getElementsByTagName("body")[0],
testX = targetJoint.depthX * DOMbody.clientWidth,
testY = DOMbody.clientHeight - (targetJoint.depthY * DOMbody.clientHeight),
clickEvent = new MouseEvent('test', {
clientX: testX,
clientY: testY
});
if (counter < 5000) {
counter++;
console.log('testX: ' + testX);
console.log('testY: ' + testY);
console.log('click event X: ' + clickEvent.clientX);
console.log('click event Y: ' + clickEvent.clientY);
}
clickEvent.initEvent(eventType, true, true);
node.dispatchEvent(clickEvent);
}
// init
simulateEvent('click', DOMfoo);
<button id="foo">Foo</button>
关于javascript - 设置点击事件 pageX 和 pageY 总是恢复为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45843458/
我不明白 int 63823 为何比 double 1.0 占用更少的空间。在这个特定实例中,int 中是否没有存储更多信息? 最佳答案 I don't understand how an int 6
这可能不是一个直接的代码问题,但它是一个经常出现在 SO 上的问题,我发现阅读它非常有用。 App Store - Help answering “Missing Compliance” (using
我在我们的应用程序中使用 syncfusion 寻呼机和下拉列表请打开以下链接。 https://stackblitz.com/edit/angular-nv6myv?file=src%2Fapp%2
以便解释指针和引用in this question我写了这段代码。 MyClass& MyClass::MyInstance() { static MyClass & myLoca
在 C 和 C++ 中,assert 是一个非常 重量级例程,将错误写入 stdout 并终止程序。在我们的应用程序中,我们实现了一个更强大的 assert 替代品,并为其提供了自己的宏。已尽一切努力
我已经创建了一个 MVC webApi 项目,现在我想使用身份验证和授权。我想我已经实现了这种安全措施,但由于某种原因,有些事情变糟了,当我编写我的凭据并尝试调用一些 webApi 方法时,显示消息“
我发现自己使用一种奇怪的方式向我的函数添加回调函数,我想知道是否有更通用的方式向函数添加回调函数,最好的情况是我的所有函数都检查最后给定的作为函数的参数,如果是,则将其用作回调。 我以前是这样的: v
几乎从来没有我只想获取某个 Remote 的情况;我总是想要所有的 Remote 。我认为这将是一个足够常见的用例,git 会考虑它(与他们有 pull.rebase true 的方式相同)。 那么,
我正在尝试使用 inarray 但它总是返回 true?有任何想法吗? (所有 li 均已显示) $("#select-by-color-list li").hide(); // get the se
我正在尝试为我公司的开发环境设置过期网址。我们使用 lighttpd在此环境中提供上传的文件,我发现 these docs这似乎相当有希望。 问题是我似乎根本无法让它工作,而且我有点不知所措,试图找出
我无法让“文件夹”外部变量工作。我总是得到[:]。 我正在 Windows 下的 Grails 上进行开发(这就是为什么外部配置文件看起来像 file:C:\path\to/file)。 我在另一个项
这个问题是出于对 PL 如何工作的好奇,而不是其他任何事情。 (它实际上是在查看与 Haskell 不同的 SML 时想到的,因为前者使用按值调用 - 但我的问题是关于 Haskell。) Haske
我有一个高速缓存内存模块,我希望它是可字寻址的,但有字节的写使能信号。 always @ (posedge clk) begin //stuff... if(write) begin
我正在处理一些代码,其中一个对象“foo”正在创建另一个对象对象“bar”,并向其传递一个Callable。之后 foo 将返回bar,然后我希望 foo 变得无法访问(即:可用于垃圾收集)。 我最初
我已将我的程序与此方法相关联: public static void CreateFileAssociation(string extension, string key, string descri
所以我正在进行目录遍历,但我无法让 opendir 按照我想要的方式工作。它总是无法打开我发送的目录,它给出了一些未知的错误。我通常传入 argv[1],但我放弃了,只是开始硬编码路径。 char *
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 9 年前。 出于某种原因,我的(基本)程序总是打印我为 else 语句保留的
我不想冒为此提出破解的风险,因为它涉及 datetime 对象。基本上,我想按如下方式进行转换: 2010-04-21 06:37:53 -> 2010-04-21 06:40:00 2010-08-
我正在用 C 语言玩文件 I/O。我正在尝试使用 fgets 从一个文件中读取数据并将其输出到另一个文件。问题是它总是返回 NULL,因此没有任何内容被复制到输出文件中。这是我的代码: #includ
class MyClass { // empty class with no base class }; int main() { MyClass* myClass = new MyC
我是一名优秀的程序员,十分优秀!