- 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/
我试图在“onscroll”事件中“刷新”pageY 值。我实际上是通过计算如果用户滚动 (+-)X 像素时鼠标的位置来使其工作的。我确信有更性感的方式来做到这一点。 Here is a DEMO 提
我有一个可滚动的页面。它的 event.pageY 位置总是根据我的屏幕大小,我的意思是即使我向下滚动很多并在屏幕顶部附近点击,它也会像 50px . 我正在使用 event.pageY 在普通的
我正在使用 eventObject.pageY 来获取事件触发时的当前鼠标位置。但我注意到这个数字是相对于文档而不是视口(viewport)的。 我想获取相对于视口(viewport)的pageY(当
我正在使用一个脚本来检测您的鼠标在悬停时进入的位置。 我正在尝试在 div 中使用脚本 overflow-y: scroll 脚本使用 pageY 检测相对于窗口的位置,有没有办法让 pageY 检测
因此,我使用从各种来源收集的以下代码来尝试计算出点击时图像的坐标: var naturalWidth = 690; var x = 0; var y = 0; var img = $('.imageT
我使用 jquery-ui 制作了一个模态对话框,它具有绝对位置。在我的新对话框中,我想使用 event.pageY 获取鼠标位置。 但是,event.pageY 返回我的背景页面的位置,当我想使用
有没有不使用 e.pageX 和 e.pageY 来定位任何元素的方法? 检查这个fiddle fiddle 实际上是对我要问的问题的一次糟糕尝试,但我认为一个视觉示例会更好。我想知道的是,是否可以通
所以,正如问题所指出的那样,有没有办法在 jQuery 中触发 mousemove 事件,同时将鼠标坐标发送到事件对象? 到目前为止,我的代码可以使用 .trigger(event) 函数触发 mou
我一直在寻找一种让工具提示悬停在光标上方的方法,我看过很多建议使用事件 pageX 和 pageY 坐标如下: const showToolTip = (evt, text) => { let t
我的问题类似于Opening JQuery Ui Dialog in MousePosition ,但是不同之处在于我希望 Jquery 对话框显示在非常靠近被单击的按钮的位置。我当前的问题是,当我设
我创建 JavaScript 来获取鼠标坐标。 通过鼠标坐标显示图像的脚本(动画光标脚本 (с) Zac Ang Eng Keat): Cursor document.body.style.cu
我试图在单击鼠标时将 div 放置在光标所在的位置。因此,当我使用 e.PageX 和 e.pageY 时,它实际上将我的 div 放置得比预期低得多。有什么想法吗? var mouseX = e.p
我正在 iPhone 上玩 touchstart 和 touchend 事件。我构建了一个示例页面,其中包含 div,如果您触摸它并滚动页面,它应该返回开始位置和结束位置的 y 坐标。 链接:http
我需要一个弹出 div,它将出现在我单击的 anchor 的正下方。现在,我想确定 anchor 的 onClick 事件的 x 和 y 坐标。这样做的最佳实践是什么?建议使用哪些事件属性? 最佳答案
我正在尝试移动位于 HTML 图像中心的 SVG 圆圈。如果您将鼠标放在图像上并拖动圆圈,效果会很好。 但是,如果我缩放图像(点击 codepen 中的 + 按钮),pageX 和 pageY 到 S
最新版本的 android chrome 是否破坏了 jquery pageY 值,还是我完全遗漏了什么?特别是从鼠标事件返回的 pageX/pageY 值。 $( document ).on( "
不确定我可能做错了什么,但我试图通过给它一个 X 和 Y 值来模拟点击事件。 这是我的代码 var clickEvent = document.createEvent('MouseEvent'),
我有下面的代码,它会在鼠标悬停时(在链接上)显示一个弹出窗口: Text I have some explaining to do!
$(document).scroll(function (e) { log("event:" + e.pageY + " - " + e.type); }); e.pageY 是未定义,e.t
当我在 Canvas 上应用翻译(转换:翻译...)时,我使用 e.clientX 和 e.clientY 检查它在 Chrome Windows 上的位置,我得到不同的值。这同样适用于 Canvas
我是一名优秀的程序员,十分优秀!