【发布时间】:2011-01-13 13:51:14
【问题描述】:
我是 jquery 和 javascript 以及整体网站开发的新手,我遇到了 .offset 函数的问题。我的以下代码在 chrome 和 FF 上运行良好,但在 IE 上无法运行:
$(document).keydown(function(k){
var keycode=k.which;
var posk=$('html').offset();
var centeryk=screen.availHeight*0.4;
var centerxk=screen.availWidth*0.4;
$("span").text(k.which+","+posk.top+","+posk.left);
if (keycode==37){
k.preventDefault();
$("html,body").stop().animate({scrollLeft:-1*posk.left-centerxk})
};
if (keycode==38){
k.preventDefault();
$("html,body").stop().animate({scrollTop:-1*posk.top-centeryk})
};
if (keycode==39){
k.preventDefault();
$("html,body").stop().animate({scrollLeft:-1*posk.left+centerxk})
};
if (keycode==40){
k.preventDefault();
$("html,body").stop().animate({scrollTop:-1*posk.top+centeryk})
};
});
我想要它做的是使用箭头键滚动窗口一个设定的百分比,所以我的想法是找到文档左上角的当前坐标并添加相对于用户屏幕的百分比并为滚动设置动画,以便内容不会跳跃,并且用户会从他所在的位置失去焦点。 $("span").text 只是让我知道发生了什么,并且在代码完成后将变成 cmets。
这就是发生的事情,在 Chrome 和 Firefox 上,位置变量的 $("span").text 的输出是正确的,从 0,0 开始,并且始终显示在坐标中滚动了多少内容,但在 IE 上它从 -2,-2 开始并且永远不会退出它,即使我手动滚动窗口直到它结束并尝试使用右箭头键它仍然会返回 -2,-2 的初始值并滚动回到开头。
我尝试用偏移量替换 document.body.scrollLetf 和 scrollTop 但结果是一样的,只是这次坐标是 0,0。难道我做错了什么?或者这是一些 IE 错误?有没有办法解决它或我可以使用其他一些功能并获得相同的结果?
另一方面,我在网站的这一部分为用户做了另外两个导航选项,一个是单击并拖动屏幕上的任意位置来移动它:
$("html").mousedown(function(e)
{
var initx=e.pageX
var inity=e.pageY
$(document).mousemove(function(n)
{
var x_inc= initx-n.pageX;
var y_inc= inity-n.pageY;
window.scrollBy(x_inc*0.7,y_inc*0.7);
initx=n.pageX;
inity=n.pageY
//$("span").text(initx+ "," +inity+ "," +x_inc+ "," +y_inc+ "," +e.pageX+ "," +e.pageY+ "," +n.pageX+ "," +n.pageY);
// cancel out any text selections
document.body.focus();
// prevent text selection in IE
document.onselectstart = function () { return false; };
// prevent IE from trying to drag an image
document.ondragstart = function() { return false; };
// prevent text selection (except IE)
return false;
});
});
$("html").mouseup(function()
{
$(document).unbind('mousemove');
});
我没有写的这段代码的唯一部分是阻止文本选择行,这些是我在关于单击和拖动对象的教程中找到的,无论如何,这段代码在 Chrome、FireFox 和 IE 上运行良好,尽管在 Firefox 上和 IE 更常见的是在拖动时会发生一些运动故障,有时似乎“滚动”有点锯齿状,它只是视觉上的东西,没有那么重要,但如果有办法防止它,我想知道。
【问题讨论】:
标签: jquery internet-explorer-8 offset