Dapatkah saya menggunakan JavaScript untuk memeriksa (terlepas dari scrollbar) jika elemen HTML telah meluap kontennya? Misalnya, div panjang dengan ukuran tetap kecil, properti overflow disetel ke terlihat, dan tidak ada bilah gulir pada elemen.
Jawaban:
Biasanya, Anda dapat membandingkan client[Height|Width]dengan scroll[Height|Width]untuk mendeteksi ini ... tetapi nilainya akan sama ketika luapan terlihat. Jadi, rutinitas deteksi harus memperhitungkan hal ini:
// Determines if the passed element is overflowing its bounds,
// either vertically or horizontally.
// Will temporarily modify the "overflow" style to detect this
// if necessary.
function checkOverflow(el)
{
var curOverflow = el.style.overflow;
if ( !curOverflow || curOverflow === "visible" )
el.style.overflow = "hidden";
var isOverflowing = el.clientWidth < el.scrollWidth
|| el.clientHeight < el.scrollHeight;
el.style.overflow = curOverflow;
return isOverflowing;
}
Diuji di FF3, FF40.0.2, IE6, Chrome 0.2.149.30.
clientWidthdan scrollWidthberbeda dengan 1px.
Coba bandingkan element.scrollHeight/ element.scrollWidthdengan element.offsetHeight/element.offsetWidth
http://developer.mozilla.org/en/DOM/element.offsetWidth
http://developer.mozilla.org/en/DOM/element.offsetHeight
http://developer.mozilla.org/en/DOM/element. scrollWidth
http://developer.mozilla.org/en/DOM/element.scrollHeight
Saya rasa jawaban ini tidak sempurna. Terkadang scrollWidth / clientWidth / offsetWidth sama meskipun teksnya meluap.
Ini berfungsi dengan baik di Chrome, tetapi tidak di IE dan Firefox.
Akhirnya, saya mencoba jawaban ini: deteksi elipsis luapan teks HTML
Ini sempurna dan bekerja dengan baik di mana saja. Jadi saya memilih ini, mungkin Anda bisa mencoba, Anda tidak akan mengecewakan.
Cara lain adalah membandingkan lebar elemen dengan lebar induknya:
function checkOverflow(elem) {
const elemWidth = elem.getBoundingClientRect().width
const parentWidth = elem.parentElement.getBoundingClientRect().width
return elemWidth > parentWidth
}
Ini adalah solusi javascript (dengan Mootools) yang akan mengurangi ukuran font agar sesuai dengan batasan elHeader.
while (elHeader.clientWidth < elHeader.scrollWidth || elHeader.clientHeight < elHeader.scrollHeight) {
var f = parseInt(elHeader.getStyle('font-size'), 10);
f--;
elHeader.setStyle('font-size', f + 'px');
}
CSS dari elHeader:
width:100%;
font-size:40px;
line-height:36px;
font-family:Arial;
text-align:center;
max-height:36px;
overflow:hidden;
Perhatikan bahwa pembungkus elHeader menyetel lebar elHeader.