2012-03-29 32 views
6

tôi có thể không cho cuộc sống của tôi, tìm ra làm thế nào tôi có thể đặt lại vị trí Fancybox 2 sử dụng left: 47px;top: 147pxChức Fancybox 2 tay

tôi đọc qua các mã nguồn, và không có hack nó, tôi không thấy một cách để ghi đè vị trí.

Đặt autoCenter thành sai chỉ dừng tự động định tâm sau thời gian đầu tiên trước khi thực hiện.

Sử dụng jQuery để thay đổi CSS hoặc đưa ra trình bao bọc tùy chỉnh để áp dụng CSS không hoạt động, vì Fancybox luôn thêm CSS nội tuyến ghi đè tất cả các lần thử của tôi.

Có cách nào để yêu cầu Fancybox ngừng tự định vị và sử dụng vị trí tuyệt đối của tôi không?

+0

Bạn có thể làm điều đó với tùy chọn 'người trợ giúp:' được ghi nhận ít tài liệu. Tôi sẽ đăng nó như một câu trả lời nếu tôi có thể tìm được mã chính xác. – Sparky

+0

Tôi không tìm thấy gì cả. Tôi không nghĩ rằng những gì bạn muốn làm là một tùy chọn mà không cần chỉnh sửa mã nguồn của plugin. Nếu bạn định làm điều đó, bạn cũng có thể chỉ cần thêm các tùy chọn định vị bổ sung của mình để ít nhất plugin vẫn có thể mở rộng được. – Sparky

Trả lời

12

Bạn có thể override inline CSS kiểu bằng cách sử dụng công cụ sửa đổi !important.

Đối với trường hợp sử dụng Fancybox sau đây sẽ ghi đè lên các vị JavaScript:

.fancybox-wrap { 
    top: 147px !important; 
    left: 47px !important; 
} 
+1

Điều đó bị ghi đè bởi CSS nội tuyến mà Fancybox 2 tiêm bằng cách sử dụng css của jQuery(). – bafromca

+0

Thật kỳ quặc - cái '!quan trọng' nên ghi đè lên bất kỳ kiểu nội tuyến nào, bao gồm các kiểu được đặt bằng 'css()' - xem tại đây: http://jsfiddle.net/YKhEG/ - có lẽ '# fancybox-wrap' là bộ chọn sai? – leepowers

+0

Đó là những gì nó là: nó .fancybox-wrap. Bạn đúng, đó là tất cả những gì tôi cần. Cảm ơn bạn! – bafromca

0

Có thể bạn không thay đổi css như vậy? Rõ ràng việc thay đổi thuộc tính margin để 'đỉnh' và 'trái'

$("a.fancybox1").fancybox({ 
'hideOnContentClick': false, 
     'onComplete' : function() { 
      $("#fancybox-wrap").css('margin', 'auto'); 
     } 
    }); 
6

tôi giải quyết vấn đề này bằng cách bổ sung bằng tay một css-class mới trong beforeShow-Handler. Tôi đã sử dụng fancybox2.

css:

.fancybox-wrap22 { 
    top: 22% !important; 
} 

js:

$(".open_fancybox").click(function() { 
    $.fancybox.open('<h1>lorem ipsum</h1>', { 
    beforeShow : function() { 
     $('.fancybox-wrap').addClass('fancybox-wrap22'); 
    } 
    }); 
    return false; 
}); 
0

Tôi đoán bạn không thể thay đổi css theo cách đó, gây ra cốt lõi Fancybox được chỉnh sửa thuộc tính phong cách của # Fancybox-wrap tất cả thời gian. Vì vậy, bạn phải thêm một lớp mới, như trong ví dụ của tôi được mô tả. Nếu không, bạn sẽ không thấy bất kỳ thay đổi trực quan nào.

0

Tôi gặp vấn đề tương tự - Tôi muốn định vị một hộp ưa thích theo cách thủ công nhưng nó sẽ tự động căn chỉnh lại.

Tôi giải quyết nó vô hiệu hóa chức năng trung tâm:

$.fancybox.center = function(){}; 
1

tôi tìm thấy giải pháp này cho fancybox2. Bạn có thể ghi đè phương thức _getPosition mặc định để ngăn chặn một hoặc nhiều thứ nguyên bị thay đổi.

// Disable vertical repositioning 
var orig = $.fancybox._getPosition; 
$.extend($.fancybox, { 
    _getPosition: function(onlyAbsolute) { 
     var rez = orig(onlyAbsolute); 
     delete rez.top; 
     return rez; 
    } 
}); 
+0

Đây là một giải pháp tốt đẹp. Làm thế nào bạn sẽ có được điều này để vị trí fancybox trên đầu trang của các yếu tố kích hoạt và hơi bù đắp sang phải bởi 20px? Và 'onlyAbsolute' có nghĩa là gì trong ví dụ mã của bạn? –

0

Lucas Teixeira đã đúng! Điều này làm việc cho tôi. Trước tiên hãy tắt chức năng trung tâm, sau đó sử dụng sự kiện onComplete để đặt css nội tuyến như bạn muốn.

<script> 
     jQuery(document).ready(function() { 

      //turn off center function 
      $.fancybox.center = function() { }; 

      //use onComplete event to modify inline css 
      $("#ModalPopup").fancybox({ 
       'modal': true, 
       'onComplete': function() { 
        $("#fancybox-wrap").css({ 'left': '250px', 'top': '150px' }); 
       } 
      }); 

     }); 
    </script> 
Các vấn đề liên quan