Проблема с выводом функции Jquery .offset в IE - PullRequest
0 голосов
/ 13 января 2011

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

1 Ответ

1 голос
/ 17 января 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...