2013-07-17 17 views
7

Kullanmadan güvenilir bir şekilde döndürme öğesinin scrollHeight özelliği Düz Javascript veya jQuery kullanarak, kaydırma öğesinin tam yüksekliğini almam gerekir. Ancak DOM özelliği scrollHeightis apparently not 100% reliable.`scrollHeight` özelliği

Sonra onun öncesinde değerine css (dönen geçici boyutunu kontrol, et auto bir css yüksekliğini vererek öngören edildi kendisi sorunları var ki - ben jQuery .css('height') gibi css height:100% yerine height:1012px nasıl elde edersiniz dönecek).

$el.css('height', 'auto'); 
scrollHeight = $el.height(); 
$el.css('height', ''); 

: Ama sonra yoluna jQuery bir öğeye doğrudan css stil uygular nedeniyle, sadece bu yüzden teorik olarak bunu yapabilir miydim, stile normal stil sayfalık ilan değere '' döner uygulayarak anladım Ama bu işe yaramıyor. height:auto, öğemin orijinal stilini 100% geçersiz kılıyor ve öğenin istenen yüksekliğin tamamını almasını sağlıyor.

Şimdi bu satırlar boyunca daha fazla bir şey düşünüyorum: İlk çocuk elemanın üstünün konumunu ve son alt öğenin alt kısmının yüksekliğini almak için konumunu kullanın. (Gerekirse ben bu kavramın sadece bir kanıtıdır, dolgu ve marj için ayarlayabilirsiniz.)

function scrollHeight($el) { 
    var lastEl = $el.children(':last'); 
    return (
     lastEl.position().top 
     + lastEl.height() 
     - $el.children(':first').position().top; 
    ); 
} 

Math.max($el[0].scrollHeight, $el.height()) arasında bazı çalışma da yararlı olabilir ...

çok kötü bir fikre mi? Bir DOM öğesinin scrollHeight'unu tanımak ve öğenin kaydırıldığı sırada değiştirilmemesine ve IE 8 gibi tüm önemli tarayıcılarda çalışmaya devam etmesine gerek yok. IE 6 & 7) için bir çözüm bilmek ilginç.

+1

IE 6 ve 7? Hatta Google (evet, beyaz başlangıç ​​sayfasında bile :)) bu iki adama destek vermedi –

+0

Sorununuzu yeniden üreten bir jsfiddle sağlayabilir misiniz? –

+0

@ RokoC.Buljan Bu oldukça iyi bir nokta. Kendi şirketim sadece geçen sene içinde IE7'den ayrıldı ... bu yüzden, vahşi ortamda kıtlaşsa bile onu nasıl destekleyeceğimi bilmek istediğimi düşünüyordum. Ama bunu yansıtmak için soruyu güncelleyeceğim. – ErikE

cevap

6

yerine

$el.css('height', 'auto');

deneyin -

$el.attr('style', 'height: auto !important');

sana çünkü bu çalışıyorum sayılabilir demek -

yükseklik: auto benim öğenin orijinal baskın olmadığından % 100 vetarzı, elemanın istenilen yüksekliğe ulaşmasını sağlar.

+1

Peki, aslında sorunun nerede olduğunu gösteriyor.Atasöz unsurların, çocuğun yüksekliğini tamamen almasını engelleyen "yükseklik" ve "taşma" değerleri ile konumlandırılmasından dolayı, güncellenmiş öneriniz bile çalışmayacaktır. Bu bilgiyi çıkardığım için üzgünüm. Bir jsfiddle iyi bir fikir olurdu. – ErikE

+1

Yani .css ('height', 'auto') 'yi kullanmak gayet iyi çalışıyor. Öneriniz mükemmel olsa da beni doğru yöne yönlendirdi: Önceden var olan bir stil, 'auto'un herhangi bir şey yapmasını engelliyordu. Bu tarz "alt: 0; üst: 0' bile gerekli değildi. Zamanını boşa harcadığım için özür dilerim, ama bu gerçekten bir israf değildi - şimdiye kadar 35 temsilcisi var ve problemimle bana yardım ettin, artı bir şey öğrendim. Teşekkür ederim! – ErikE

+0

@ErikE Teşekkürler, yardımcı olabilirim: ~) – Ross

İlgili konular