2013-06-13 29 views
5

Tôi muốn điều hướng đến một div bên trong iframe bằng cách sử dụng jQuery.animate từ liên kết bên ngoài khung nội tuyến. Đây là Bộ luật tôi sử dụng:Làm cách nào để áp dụng 'bù đắp' cho một phần tử bên trong khung nội tuyến?

function scrollToAnchorIframe(aid){ 
    var aTag = window.frames['myFrame'].document.getElementById(aid); 
    $('html,body').animate({scrollTop: aTag.offset().top - 62},'slow'); 
} 

Tuy nhiên, nó không hoạt động, đăng nhập lỗi "Object [object HTMLElement] has no method 'offset'". Có cách nào để có được bù đắp của id để làm cho nó hoạt động?

Cập nhật (Giải Quyết): Đó là đoạn code tôi đang sử dụng hiện nay:

function scrollToAnchorIframe(aid){ 
    var aTag = window.frames['myFrame'].document.getElementById(aid); 
    jQuery('html,body').animate({scrollTop: $(aTag).offset().top + $("#myFrame").offset().top - 62},'slow'); 
} 
+5

Bạn nhận được lỗi đó vì đối tượng không phải là đối tượng jQuery. Đó là một HTMLElement. Hãy thử '$ (aTag) .offset()' hoặc bọc 'window.frames ['myFrame']. Document.getElementById (viện trợ);' trong một '$()' – crush

+0

Lưu ý rằng bạn không thể sử dụng chương trình X-Frame trừ khi bạn làm việc trên cùng một miền với cùng một giao thức. – ARMBouhali

Trả lời

4

aTag là phần tử DOM, làm cho nó jQuery đối tượng

$('html,body').animate({scrollTop: $(aTag).offset().top - 62},'slow'); 
+0

Cảm ơn bạn! Điều đó đã làm các trick. Đây là mã hoàn chỉnh mà tôi sử dụng ngay bây giờ: 'function scrollToAnchorIframe (aid) { var aTag = window.frames ['myFrame']. Document.getElementById (aid); jQuery ('html, body') animate ({scrollTop: $ (aTag) .offset(). Top + $ ("# myFrame"). Offset(). Top - 62}, 'slow'); } ' – Georg

+0

@Georg Cheers !! –

+0

@Mohammad Adil: Cảm ơn người đàn ông .. Hoạt động thực sự tốt. –

0

Nếu khung nội tuyến được đặt bên trong một container hộp, đây là bản cập nhật để điều hướng lên/xuống tới dấu trang neo của khung nội tuyến từ vùng chứa trang mẹ (lưu ý: "window.frames" có lỗi tương thích đã biết với trình duyệt FF, vì vậy, tôi sẽ sử dụng "contentWindow" để thay thế):

function iframeBookmark(anchor) { 
mytag = document.getElementById("iframeID").contentWindow.document.getElementById(anchor); 
pos1 = $(mytag).offset().top; 
pos2 = $("#iframeID").offset().top; 
if (pos2 > pos1) { 
    $("#iframeContainerID").animate({scrollTop: pos2 - (pos2 - pos1) },'slow'); 
    } 
else { 
    $("#iframeContainerID").animate({scrollTop: pos2 + (pos1 - pos2) },'slow'); 
    } 
} 

Vì vậy, khi chúng ta gọi hàm từ HTML phụ huynh, lên/xuống cuộn phụ thuộc vào iframe hiện các mục:

<a onclick="iframeBookmark('iframeBookmarkID')">...</a> 

... nơi 'iframeBookmarkID' là ID của bookmark -nhà trong trang iframe.

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