2012-01-12 64 views
7

Tôi muốn tự động thay đổi vị trí cửa sổ bật lên (trái/phải, trên cùng/dưới) tùy thuộc vào vị trí của phần tử trên màn hình.Tự động thay đổi vị trí của cửa sổ phụ thuộc vào vị trí hiển thị

//get_popover_placement(dom_el) returns 'left', 'right', 'top', or 'bottom' 
    function set_popover(dom_el) { 
    var the_placement = get_popover_placement(dom_el); 
    $(dom_el).popover({ 
     offset: 10, 
     placement: the_placement 
    }).popover('show'); 
} 

//set the placement on every hover 
$('a[data-rel=popover]').hover(function(){ 
     set_popover(this); 
    }, function(){}); 

Nó hoạt động lần đầu tiên, nhưng nếu vị trí của những thay đổi yếu tố (khi cửa sổ được thay đổi kích cỡ, ví dụ), vị trí không được cập nhật với các cuộc gọi tiếp theo để set_popover.

Tôi đã thêm một chút mã vào get_popover_placement để thêm đường viền màu khác với phần tử, tùy thuộc vào vị trí. Màu đường viền được cập nhật mỗi lần, cho biết mã đang được gọi và các tính toán đang được thực hiện chính xác, nhưng vị trí không được cập nhật.

Dường như tùy chọn vị trí chỉ có thể được đặt một lần. Làm thế nào tôi có thể vượt qua giới hạn này? Có một biến nào đó có thể được xóa để đặt lại cửa sổ bật lên không?

+1

Câu trả lời của tôi cho một câu hỏi tương tự có thể hữu ích cho bạn: http://stackoverflow.com/ câu hỏi/10238089/how-can-you-sure-twitter-bootstrap-popover-windows-được hiển thị/10937083 # 10937083 – Cymen

Trả lời

17

Hãy thử thay đổi này, bằng cách sử dụng .Trên() trong jQuery để đính kèm một người biết lắng nghe sự kiện:

Changed trả lời này bằng cách cập nhật Kevin Ansfield của - thêm mã đến chức năng vị trí.

$('a[data-rel=popover]').popover({ 
     placement: get_popover_placement 
    }); 

    function get_popover_placement(pop, dom_el) { 
     var width = window.innerWidth; 
     if (width<500) return 'bottom'; 
     var left_pos = $(dom_el).offset().left; 
     if (width - left_pos > 400) return 'right'; 
     return 'left'; 
    } 
+0

Kết quả hiệu quả giống với mã gốc của jeremiahs. Điểm khác biệt duy nhất là anh ta đang sử dụng hàm .hover(). –

+0

@KevinAnsfield Bạn nói đúng, sau khi thử nghiệm tôi đã cập nhật mã giống như của bạn, thêm một tình huống sử dụng vào chức năng vị trí. Cảm ơn. – Calle

+0

Tôi đã chỉnh lại điều này một chút vì nó đang xuất hiện dưới đáy cửa sổ. 'function get_popover_placement (pop, dom_el) { var width = window.innerWidth; var height = window.innerHeight; var top_pos = $ (dom_el) .offset(). nếu (chiều cao - top_pos <400) { trả lại 'trên cùng'; } nếu (chiều rộng <500) { trả về 'dưới cùng'; } var left_pos = $ (dom_el) .offset(). Left; nếu (chiều rộng - left_pos> 400) { trả về 'trái'; } trả về 'trái'; } ' – wsams

6

Tôi vừa kiểm tra nguồn khởi động lại và nhận ra rằng các hàm được chuyển đến thuộc tính vị trí sẽ nhận được đối số đã qua. Tôi đã đạt được một điều tương tự với những gì bạn đang cố gắng, hãy thử những điều sau đây và xem nó có phù hợp với bạn không:

$('a[data-rel=popover]').popover({ 
    offset: 10, 
    placement: get_popover_placement 
}); 

function get_popover_placement(pop, dom_el) { 
    // your placement function code here 
} 
+0

Bạn vừa lưu lại ngày của tôi! Tốt đẹp là vị trí là hư không tài liệu, đặc biệt là thực tế là nó nhận được đối số ... – awendt

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