Я новичок в jquery и javascript, а также в разработке веб-сайта в целом, и у меня возникла проблема с функцией .offset. У меня есть следующий код работает нормально на хромовых и FF, но не работает на IE:Проблема с выходом функции JQuery .offset в 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 и IE чаще бывает когда вы перетаскиваете мышцы, иногда кажется, что «прокрутка» - латентная зубчатая, это только визуальная вещь и не такая значительная, но если есть способ предотвратить ее, я хотел бы знать.