- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我创建 JavaScript 来获取鼠标坐标。
通过鼠标坐标显示图像的脚本(动画光标脚本 (с) Zac Ang Eng Keat):
<html>
<head>
<title>Cursor</title>
<script type="text/javascript">
document.body.style.cursor = 'none';
var trailimage=["http://2aek.com/images/cursors/cur1.gif", 32, 32] //image path, plus width and height
var offsetfrommouse=[0,0] //image x,y offsets from cursor position in pixels. Enter 0,0 for no offset
var displayduration=0 //duration in seconds image should remain visible. 0 for always.
if (document.getElementById || document.all)
document.write('<div id="trailimageid" style="position:absolute;visibility:visible;left:0px;top:0px;width:1px;height:1px"><img src="'+trailimage[0]+'" border="0" width="'+trailimage[1]+'px" height="'+trailimage[2]+'px"></div>')
function gettrailobj(){
if (document.getElementById)
return document.getElementById("trailimageid").style
else if (document.all)
return document.all.trailimagid.style
}
function truebody(){
return (!window.opera && document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}
function hidetrail(){
gettrailobj().visibility="hidden"
document.onmousemove=""
}
function followmouse(e){
var xcoord=offsetfrommouse[0]
var ycoord=offsetfrommouse[1]
xcoord+=e.pageX
ycoord+=e.pageY
var docwidth=document.all? truebody().scrollLeft+truebody().clientWidth : pageXOffset+window.innerWidth-15
var docheight=document.all? Math.max(truebody().scrollHeight, truebody().clientHeight) : Math.max(document.body.offsetHeight, window.innerHeight)
if (xcoord+trailimage[1]+3>docwidth || ycoord+trailimage[2]> docheight)
gettrailobj().display="none"
else
gettrailobj().display=""
gettrailobj().left=xcoord+"px"
gettrailobj().top=ycoord+"px"
}
document.onmousemove=followmouse
if (displayduration>0)
setTimeout("hidetrail()", displayduration*1000)
</script>
</head>
<body>
Press F11 (make the browser window full screen) in Firefox
</body>
</html>
但是,它有一些问题:如果在 Firefox 中我更改了全屏模式,图像会得到不正确的坐标。
我尝试使用 screenX 和 screenY 代替 pageX 和 pageY,但它需要以某种方式获得更改全屏模式的时刻。
更新:
<html>
<head>
<title>Cursor</title>
<script type="text/javascript">
var isFirefox = (navigator.userAgent.toLowerCase().indexOf('firefox') > -1) || (typeof InstallTrigger !== 'undefined');
function isFullScreen() { //helper func to detect if Firefox is in fullscreen
if (window['fullScreen'] !== undefined) return window.fullScreen; //Firefox support this property
return (screen.width == window.innerWidth) && (window.screenY == 0 || window.screenTop == 0) && Math.abs(screen.height - window.innerHeight) < 45;
}
document.body.style.cursor = 'none';
var trailimage = ["http://2aek.com/images/cursors/cur1.gif", 32, 32] //image path, plus width and height
var offsetfrommouse = [0, 0] //image x,y offsets from cursor position in pixels. Enter 0,0 for no offset
var displayduration = 0 //duration in seconds image should remain visible. 0 for always.
if (document.getElementById || document.all)
document.write('<div id="trailimageid" style="position:absolute; visibility:visible; left:0px; top:0px; width:1px; height:1px"><img src="' + trailimage[0] + '" border="0" width="' + trailimage[1] + 'px" height="' + trailimage[2] + 'px"></div>')
function gettrailobj() {
if (document.getElementById)
return document.getElementById("trailimageid").style;
else if (document.all)
return document.all.trailimagid.style;
}
function truebody() {
return (!window.opera && document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body;
}
function hidetrail() {
gettrailobj().visibility = "hidden";
document.onmousemove = "";
}
var last_screenX = -1, last_screenY = -1;
var deltaX = 0, deltaY = 0;
function followmouse(e) {
var xx = e.pageX, yy = e.pageY;
if (isNaN(xx) && isFirefox) { //its called from window_resize
//if (isFullScreen())
xx = last_screenX + window.scrollX;
yy = last_screenY + window.scrollY;
if (!isFullScreen()) { //exit from fullscreen
//alert("exit");
xx -= deltaX;
yy -= deltaY;
}
}
//msg.innerHTML = "clientY: "+e.clientY+", pageY: "+e.pageY+", scrnY: "+e.screenY+", win.screenY: "+window.screenY;
var xcoord = xx + offsetfrommouse[0];
var ycoord = yy + offsetfrommouse[1];
var docwidth = document.all ? truebody().scrollLeft + truebody().clientWidth : pageXOffset + window.innerWidth - 15;
var docheight = document.all ? Math.max(truebody().scrollHeight, truebody().clientHeight) : Math.max(document.body.offsetHeight, window.innerHeight);
if (xcoord + trailimage[1] + 3 > docwidth || ycoord + trailimage[2] > docheight)
gettrailobj().display = "none";
else
gettrailobj().display = "";
gettrailobj().left = xcoord + "px";
gettrailobj().top = ycoord + "px";
if (!isNaN(e.screenX)) {
last_screenX = e.screenX;
last_screenY = e.screenY;
}
if((e.screenY - e.clientY) > 5) { //not fullscreen. (in fullscreen it is 0 or 1)
deltaX = e.screenX - e.clientX;
deltaY = e.screenY - e.clientY;
}
}
document.onmousemove = followmouse;
window.onresize = followmouse; // *** new event handler is add
if (displayduration > 0)
setTimeout("hidetrail()", displayduration * 1000);
</script>
</head>
<body>
Press F11 (make the browser window full screen) in Firefox
</body>
</html>
最佳答案
您应该添加 onresize 事件处理程序来检查用户是否进入全屏模式并计算鼠标在这种情况下的新位置。另外,当用户退出全屏时,我们应该重新计算其位置。我画了一些图,发现转换公式如下:
//when enter to FullScreen:
xx = last_screenX + window.scrollX;
yy = last_screenY + window.scrollY;
//when Exit from FullScreen:
xx = last_screenX + (e.screenX - e.clientX) + window.scrollX
yy = last_screenY + (e.screenY - e.clientY) + window.scrollY
当页面包含滚动条时,需要
window.scrollX
和 window.scrollY
。
所以,最终的代码将是这样的:
<html>
<head>
<title>Cursor</title>
</head>
<body>
<script type="text/javascript">
var isFirefox = (navigator.userAgent.toLowerCase().indexOf('firefox') > -1) || (typeof InstallTrigger !== 'undefined');
function isFullScreen() { //helper func to detect if Firefox is in fullscreen
if (window['fullScreen'] !== undefined) return window.fullScreen; //Firefox support this property
return (screen.width == window.innerWidth) && (window.screenY == 0 || window.screenTop == 0) && Math.abs(screen.height - window.innerHeight) < 45;
}
document.body.style.cursor = 'none';
var trailimage = ["http://2aek.com/images/cursors/cur1.gif", 32, 32]; //image path, plus width and height
var offsetfrommouse = [-10, -5]; //image x,y offsets from cursor position in pixels. Enter 0,0 for no offset. also try [-10, -5]
var displayduration = 0; //duration in seconds image should remain visible. 0 for always.
if (document.getElementById || document.all)
document.write('<div id="trailimageid" style="position:absolute; visibility:visible; display:none; left:0px; top:0px; width:1px; height:1px"><img src="' + trailimage[0] + '" border="0" width="' + trailimage[1] + 'px" height="' + trailimage[2] + 'px"></div>')
function gettrailobj() {
if (document.getElementById)
return document.getElementById("trailimageid").style;
else if (document.all)
return document.all.trailimagid.style;
}
function truebody() {
return (!window.opera && document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body;
}
function hidetrail() {
gettrailobj().visibility = "hidden";
document.onmousemove = "";
}
var last_screenX = -1, last_screenY = -1;
var deltaX = 0, deltaY = 0;
var trail = gettrailobj();
var tbody = truebody();
function followmouse(e) {
var xx = e.pageX, yy = e.pageY;
if (isNaN(xx) && isFirefox) { //its called from window_resize
//if (isFullScreen())
xx = last_screenX + window.scrollX;
yy = last_screenY + window.scrollY;
if (!isFullScreen()) { //exit from fullscreen
//alert("exit");
xx -= deltaX;
yy -= deltaY;
}
}
//msg.innerHTML = "clientY: "+e.clientY+", pageY: "+e.pageY+", scrnY: "+e.screenY+", win.screenY: "+window.screenY;
var xcoord = xx + offsetfrommouse[0];
var ycoord = yy + offsetfrommouse[1];
var docwidth = document.all ? tbody.scrollLeft + tbody.clientWidth : pageXOffset + window.innerWidth - 15;
var docheight = document.all ? Math.max(tbody.scrollHeight, tbody.clientHeight) : Math.max(document.body.offsetHeight, window.innerHeight);
trail.display = (xcoord + trailimage[1] + 3 > docwidth || ycoord + trailimage[2] > docheight) ? "none" : "";
trail.left = xcoord + "px";
trail.top = ycoord + "px";
if (!isNaN(e.screenX)) {
last_screenX = e.screenX;
last_screenY = e.screenY;
}
if((e.screenY - e.clientY) > 5) { //not fullscreen. (in fullscreen it is 0 or 1)
deltaX = e.screenX - e.clientX;
deltaY = e.screenY - e.clientY;
}
}
document.onmousemove = followmouse;
window.onresize = followmouse; // *** new event handler is add
if (displayduration > 0)
setTimeout("hidetrail()", displayduration * 1000);
</script>
<div>Press F11 (make the browser window full screen) in Firefox</div>
</body>
</html>
关于JavaScript:鼠标坐标不正确(全屏模式下的 pageX 和 pageY),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42132146/
我试图在“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
我是一名优秀的程序员,十分优秀!