一、scrollIntoView方法概述
scrollIntoView方法用於將DOM元素滾動到瀏覽器視口中可見區域。該方法有一個參數,即是否滾動到可見區域的最佳位置。默認參數是true。
// 用於將id為target的元素滾動到瀏覽器可見區域
document.getElementById('target').scrollIntoView();
二、scrollIntoView方法的兼容性問題
1. 在部分瀏覽器中scrollIntoView方法不兼容
scrollIntoView()方法在不同瀏覽器中的兼容性情況並不一致,有些瀏覽器甚至無法實現該方法,例如IE8及以下版本的瀏覽器,iOS Safari瀏覽器等。如果使用該方法,應該在代碼中加入瀏覽器判斷語句來進行兼容性處理。
// 僅在支持scrollIntoView()方法的情況下執行
if (typeof Element.prototype.scrollIntoView === 'function') {
document.getElementById('target').scrollIntoView();
}
2. 在部分瀏覽器中scrollIntoView方法存在兼容性問題
2.1 在ios上scrollIntoView方法在fixed元素上的兼容性問題
iOS Safari中fixed元素不能被scrollIntoView方法正確滾動到瀏覽器可視區域。解決方法是不使用fixed定位,可以使用absolute或者relative進行布局。
// fixed元素無法正常滾動
<div style="position: fixed;" id="target2">target2</div>
<button onclick="document.getElementById('target2').scrollIntoView()">scrollIntoView()</button>
// 使用relative元素進行布局解決問題
<div style="position: relative;">
<div style="position: absolute; top: 2000px;" id="target2">target2</div>
</div>
<button onclick="document.getElementById('target2').scrollIntoView()">scrollIntoView()</button>
2.2 在部分瀏覽器上scrollIntoView方法在不同元素上的兼容性問題
scrollIntoView方法在各個瀏覽器中對於元素的滾動表現並不完全一致。例如,在chrome中,滾動到表格元素的某個單元格時,表格會被滾動到最頂端,而在firefox中則不會。
三、解決scrollIntoView方法兼容性問題的方案
1. 使用插件實現
在代碼中使用高度封裝的插件實現scrollIntoView方法的兼容,例如使用jquery中的scrollIntoView插件、iscroll.js等。
// 使用jquery中的scrollIntoView插件
$.fn.scrollIntoView = function() {
$('html, body').animate({
scrollTop: $(this).offset().top
}, 200);
};
// 使用
$('#target').scrollIntoView();
2. 自行實現兼容性處理
通過判斷當前瀏覽器支持的scrollIntoView方法,來選擇使用原生的方法或者自己實現一種兼容性方案。一個比較常用的方案是根據當前元素在視口中的位置自行運算並滾動。
if (typeof Element.prototype.scrollIntoView === 'function') {
document.getElementById('target').scrollIntoView();
} else {
// 自行實現根據位置滾動的方案
}
四、總結
scrollIntoView是很常用的一種滾動操作,但在不同平台、不同瀏覽器上的表現並不完全一致,因此在進行開發時,需要做好兼容性處理,以保證代碼的可擴展性。可以通過使用插件或者自行實現一種兼容性方案來解決兼容性問題,達到最佳的兼容性結果。
原創文章,作者:LLSIS,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/331440.html