scrollLeft和scrollTop用於獲取/設置滾動條的,以下:html
若是沒有傳入val值則獲取滾動條距離,若是有設置val則標識設置滾動條距離,仍是舉個栗子,以scrollTop爲例,以下:node
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="http://libs.baidu.com/jquery/1.7.1/jquery.min.js"></script> <style> *{margin:0;padding:0;} button{margin:1px 0;} div{margin:20px;width: 200px;height: 180px;position: relative;padding-top: 20px;background: #c38;} h1{margin:10px;color: #333;} </style> </head> <body> <br/> <p id="result">結果:<span></span></p> <button id="b1">獲取垂直滾動條距離</button><br/> <button id="b2">回到首頁</button> <br/><br/> <script> $('#b1').click(()=>{ //獲取滾動條距離 $('span').text( $(window).scrollTop() ) }) $('#b2').click(()=>{ //設置垂直滾動條滾動到頂部 $(window).scrollTop(0) }) //這裏先新增一個文檔碎片,而後添加50個p標籤,最後添加到body子節點的最前面,以模擬滾動條 { let i=1,fragments=document.createDocumentFragment() while(i<=50){ let p = document.createElement('p'); p.innerHTML = i++; fragments.append(p) } document.body.insertBefore(fragments,document.body.childNodes[0]) } </script> </body> </html>
當咱們點擊按鈕1時將獲取當前垂直滾動條的距離,並將結果添加到span裏面,點擊按鈕2會設置垂直滾動條,讓它滾動到頂部,效果以下:jquery
writer by:大沙漠 QQ:22969969app
不少網站右下角有一個滾動到頂部就能夠用這個來實現,完美兼容全部網站,這個得感謝完美jQuery的兼容性。源碼分析
源碼分析網站
代碼實現以下this
jQuery.each( ["Left", "Top"], function( i, name ) { //在jQuery.fn加上.scrollLeft()和.scrollTop()方法 對於scrollLeft來講,i爲0,對於scrollTop來講,i爲1 var method = "scroll" + name; jQuery.fn[ method ] = function( val ) { //掛在實例上面 var elem, win; if ( val === undefined ) { //若是沒有傳入val參數 elem = this[ 0 ]; if ( !elem ) { //若是沒有匹配元素 return null; //則返回null } win = getWindow( elem ); //獲取window對象,若是參數elem是window對象,則返回window對象,不然返回false // Return the scroll offset return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] : jQuery.support.boxModel && win.document.documentElement[ method ] || win.document.body[ method ] : elem[ method ]; //用於讀取window對象、document對象、元素的滾動偏移 } //執行到這裏,則表示是設置滾動了 // Set the scroll offset return this.each(function() { //遍歷匹配元素,設置每一個元素的滾動偏移 win = getWindow( this ); if ( win ) { //若是是window對象,則調用scrollTo()滾動到執行的位置,該方法兩個參數都是必須的。 win.scrollTo( !i ? val : jQuery( win ).scrollLeft(), //這兩個參數是必填的 i ? val : jQuery( win ).scrollTop() ); } else { this[ method ] = val; //不然設置元素的scrollLeft、scrollTop屬性。 } }); }; });
getWindow實現以下:spa
function getWindow( elem ) { return jQuery.isWindow( elem ) ? elem : //若是是elem是window對象,則直接返回elem elem.nodeType === 9 ? elem.defaultView || elem.parentWindow : //不然若是elem表示整個文檔,則返回elem.defaultView(即window對象),不然返回elem.parentWindow,若是elem.parentWindow不存在則返回false false; }
從源碼能夠發現,若是是操做滾動條的話,就須要匹配window或documetn對象才能夠code