2011-01-13 126 views
0

我是jquery和javascript的新手,並且整體上開發網站,並且遇到了.offset函數的問題。我有以下的代碼工作鉻和FF罰款,但不工作的IE瀏覽器:在IE瀏覽器中輸出jquery function .offset時出現問題

$(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只是讓我知道發生了什麼,並且在代碼完成時會變成註釋。

因此,在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

相關問題