2014-06-10 199 views
1

有許多問題關於阻止用戶啓動(即鼠標,觸摸,鍵盤)通過JavaScript滾動。在這種情況下,我在CMS中創建了一個組件,該組件需要阻止另一個CMS組件滾動到視圖中。我無法訪問其他CMS組件的代碼(這也是嚴重混淆)。防止JavaScript啓動滾動

我曾嘗試禁用迫使下面的代碼滾動的典型方式,但其他CMS仍然滾動到視圖中,第二個或兩個以下代碼後運行:

Element.prototype.scrollIntoView = function(alignWithTop){ 
    console.log("******** scrollIntoView: " + this.getAttribute("id")); 
    }; 

    Element.prototype.scrollIntoViewIfNeeded = function(alignWithTop){ 
    console.log("******** scrollIntoViewIfNeeded: " + this.getAttribute("id")); 
    }; 

    Element.prototype.scrollByLines = function(){ 
    console.log("******** scrollByLines: " + this.getAttribute("id")); 
    }; 

    Element.prototype.scrollByPages = function(){ 
    console.log("******** scrollByPages: " + this.getAttribute("id")); 
    }; 

    Element.prototype.focus = function(){ 
    console.log("******** focus: " + this.getAttribute("id")); 
    }; 

    window.scroll = function(xpos,ypos){ 
    console.log("******** scroll: " + xpos+","+ypos); 
    } 

    window.scrollTo = function(xpos,ypos){ 
    console.log("******** scrollTo: " + xpos+","+ypos); 
    } 

    window.scrollBy = function(xpos,ypos){ 
    console.log("******** scrollBy: " + xpos+","+ypos); 
    } 

    jQuery.fn.scrollTop = function(){ 
    console.log("!!!!!!!! scrollTop"); 
    }; 

    jQuery.fn.animate = function(){ 
    console.log("!!!!!!!! animate"); 
    }; 

    jQuery.fn.click = function(){ 
    console.log("!!!!!!!! click"); 
    }; 

我可以設置window.onscroll給力在一段時間內致電window.scrollTo(0,0),但這看起來並不令人滿意,因爲它看起來很刺眼,並且阻止了用戶啓動的滾動,我不想阻止它。

是否有其他方式的JavaScript(或jQuery)可以強制上述代碼中缺少的滾動?

+0

「滾動自己進入視圖「 - 它是一個像淡入或類似的動畫效果? – Vandesh

+0

嘗試返回false時,你認爲它不應該滾動。 –

+0

通過「自動滾動到視圖中」我的意思是我的組件應該位於頁面的頂部,下面提供了CMS提供的組件,名義上滾動頁面的底部。但是當它加載時,CMS提供的組件會滾動到視圖中。 –

回答

1

因此,這應該是很明顯,但CMS被調用函數是HTMLElementObject.focus(),所以下面是我用來停止頁面加載和安裝過程中不需要滾動代碼:

// Stop the page from jumping around for a little while 
var oldFocus = Element.prototype.focus; 
Element.prototype.focus = function(){}; 
setTimeout(
    function(){ 
    Element.prototype.focus = oldFocus; 
    },5000);