2009-03-25 24 views
21

Làm cách nào để phát hiện sự hiện diện của Thanh cuộn (sử dụng Javascript) trong HTML iFrame?Làm cách nào để phát hiện sự hiện diện của Thanh cuộn (sử dụng Javascript) trong HTML iFrame?

Tôi đã cố gắng:

 var vHeight = 0; 
     if (document.all) { 
      if (document.documentElement) { 
      vHeight = document.documentElement.clientHeight; 
      } else { 
      vHeight = document.body.clientHeight 
      } 
    } else { 
     vHeight = window.innerHeight; 
    } 

    if (document.body.offsetHeight > vHeight) { 
     //when theres a scrollbar 
    }else{ 
     //when theres not a scrollbar 
    } 

Và tôi cũng đã cố gắng:

  this.scrollLeft=1; 
    if (this.scrollLeft>0) { 
     //when theres a scrollbar 
     this.scrollLeft=0; 
     }else{ 
     //when theres not a scrollbar 
     return false; 
    } 

Với không thành công ..

Tôi đã tìm kiếm các objets javascript trên DOM Inspec tor, nhưng không tìm thấy gì cả.

Có thể phát hiện sự hiện diện của thanh cuộn trong khung nội tuyến trong javacscript không?


Nội dung iframe đến từ cùng một tên miền.

Không thành công cho đến nay ..

alt text http://www.upvtp.com.br/file.php/1/help_key.jpg

Trả lời

10

Sử dụng jQuery bạn có thể so sánh chiều cao văn bản, vị trí scrollTop và chiều cao khung nhìn, mà có thể giúp bạn có được câu trả lời mà bạn cần.

cái gì đó dọc theo dòng:

$(window).scroll(function(){ 
    if(isMyStuffScrolling()){ 
    //There is a scroll bar here! 
    } 
}); 

function isMyStuffScrolling() { 
    var docHeight = $(document).height(); 
    var scroll = $(window).height() + $(window).scrollTop(); 
    return (docHeight == scroll); 
} 
+0

Cảm ơn câu trả lời của bạn, nhưng mã của bạn chỉ kiểm tra khi tôi cố gắng di chuyển thanh cuộn. Tôi muốn thử nghiệm nó khi tải trang. – Bonfocchi

+1

$ .ready (function() {}); –

+2

Tôi xin lỗi, nhưng đây không phải là giải pháp đúng. :(Mã của bạn thực sự kiểm tra, cho dù tài liệu được cuộn xuống phía dưới Đây là một bằng chứng: http://jsfiddle.net/vvdb0292/2/ Tôi nghĩ câu trả lời của bobince là chính xác – kaboom

1

Tôi không nghĩ rằng điều này có thể được thực hiện nếu nội dung iframe xuất phát từ tên miền khác do hạn chế về an ninh JavaScript.

EDIT: Trong trường hợp đó, điều gì đó nằm dọc theo dòng cho iframe một tên = 'someframe' và id = 'someframe2' và sau đó so sánh khung ['someframe']. Document.body.offsetWidth with document.getElementById ('someframe2'). offsetWidth sẽ cho bạn câu trả lời.

+1

Nội dung iframe đến từ cùng một tên miền. – Bonfocchi

37
var root= document.compatMode=='BackCompat'? document.body : document.documentElement; 
var isVerticalScrollbar= root.scrollHeight>root.clientHeight; 
var isHorizontalScrollbar= root.scrollWidth>root.clientWidth; 

Điều này phát hiện xem có cần cho thanh cuộn hay không. Đối với các iframe mặc định, điều này giống như việc có một thanh cuộn hay không, nhưng nếu thanh cuộn bị buộc phải bật hoặc tắt (sử dụng thuộc tính 'scrolling = "yes"/"no"' trong tài liệu gốc hoặc tràn CSS : cuộn/ẩn 'trong tài liệu iframe) thì điều này có thể khác nhau.

+1

tuyệt vời, nhờ – Sebas

+0

Đây phải là câu trả lời – Julian

+0

Tại sao bạn thử nghiệm 'BackCompat' thay vì chỉ sử dụng 'documentElement' trong tất cả các chế độ compat? – bab

0

Tôi nghĩ rằng lần thử thứ hai của bạn đang đi đúng hướng. Ngoại trừ thay vì this, bạn nên thử cuộn/kiểm tra document.body.

3
$(window).scroll(function(){ 
    if(isMyStuffScrolling()){ 
//scrolling 
    }else{ 
//not scrolling 
} 
}); 

function isMyStuffScrolling() { 
    var docHeight = $(document).height(); 
    var scroll = $(window).height() ;//+ $(window).scrollTop(); 
    if(docHeight > scroll) return true; 
    else return false; 
} 

cải thiện-thay đổi một chút từ Jon`s đang Winstanley

0

tôi đã tìm thấy công trình này trên bất kỳ yếu tố, ít nhất là trên Chrome:

hasVerticalScrollbar = (element.scrollHeight > element.offsetHeight) 
     || 
(element.scrollHeight > element.clientHeight 

thanh cuộn ngang có thể được phát hiện tương tự, sử dụng Width thay vì Height.

Các vấn đề liên quan