Я новичок в 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"). Предназначен только для того, чтобы я знал, что происходит, и по завершении кода будет превращен в комментарии.
Итак, вот что происходит, в Chrome и Firefox вывод $ ("span"). Текста для переменных позиции корректен, начиная с 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 и т. е. во время перетаскивания чаще случаются глюки движений, иногда кажется, что «прокрутка» - это немного зазубренный, это всего лишь визуальная вещь и не такая уж значительная, но если есть способ предотвратить это, я хотел бы знать.