点击鼠标位置,在javascript中滚动

时间:2011-06-10 13:53:30

标签: javascript asp.net

我有代码在浏览器滚动时获取x-y坐标:

left1 = window.event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
top1 = window.event.clientY + document.body.scrollTop + document.documentElement.scrollTop;

这适用于IE7,但不适用于Mozilla Firefox 3.5.19。如何让它在Firefox中运行?

3 个答案:

答案 0 :(得分:4)

以下JS适用于IE 8和firefox 3.6.17

function getScrollingPosition()
{
var position = [0, 0];
if (typeof window.pageYOffset != 'undefined')
{
position = [
window.pageXOffset,
window.pageYOffset
];
}
else if (typeof document.documentElement.scrollTop
!= 'undefined' && document.documentElement.scrollTop > 0)
{
position = [
document.documentElement.scrollLeft,
document.documentElement.scrollTop
];
}
else if (typeof document.body.scrollTop != 'undefined')
{
position = [
document.body.scrollLeft,
document.body.scrollTop
];
}
return position;
}

这篇文章也可能有所帮助。 http://www.softcomplex.com/docs/get_window_size_and_scrollbar_position.html

答案 1 :(得分:3)

请记住,在Mozilla中,click事件的处理方式与在Internet Explorer中的处理方式不同。它们也有不同的方式来获得光标位置的位置。这是一个非常简单的谷歌搜索,可以获得具体细节。


 var IE = document.all ? true : false; // check to see if you're using IE

if (IE) //do if internet explorer 
        {
            cursorX = event.clientX + document.body.scrollLeft;
            cursorY = event.clientY + document.body.scrollTop;
        }
        else  //do for all other browsers
        {
            cursorX = (window.Event) ? e.pageX : event.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
            cursorY = (window.Event) ? e.pageY : event.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
        }

另请注意,初始化代码中应包含以下内容:

if (window.Event) {
            if (window.captureEvents) { //doesn't run if IE
                document.captureEvents(Event.MOUSEMOVE);
            }
        }
        document.onmousemove = refreshCursorXY;

在我所说的点击方面,浏览器之间点击的价值存在差异。例如,此检查应在您的点击事件中发生(您将e,事件发送到)。 e不会被I.E.发送所以我们这样做:

//internet explorer doesn't pass object event, so check it...
        if (e == null) 
        {
            e = window.event;
        }

        //1 = internet explorer || 0 = firefox
        if ((e.button == 1 && window.event != null || e.button == 0)) 

同样,IE和其他浏览器之间存在很多差异,因此有很多文档。如果您需要有关此主题的更多信息,Google搜索可以创造奇迹。

答案 2 :(得分:0)

只有IE将事件信息放在全局窗口对象中。所有其他浏览器都遵循W3C建议,即将事件信息传递给在元素上注册的侦听器回调。您还需要使用element.addEventListener()而不是element.attachEvent()。请参阅Mozilla开发人员网络上的addEventListener()文档。