2011-01-13 1 views
0

Я новичок в 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 чаще бывает когда вы перетаскиваете мышцы, иногда кажется, что «прокрутка» - латентная зубчатая, это только визуальная вещь и не такая значительная, но если есть способ предотвратить ее, я хотел бы знать.

ответ

1

хорошо, я просто решить мою проблему, изменяя переменную posk в

var poskt=$(document).scrollTop(); 

и добавив новый вар для scrollLeft, таким образом код ведут себя так же на Chrome, FF и Internet Explorer