2014-05-14 13 views
8

Próbuję utworzyć menu za pomocą paska bocznego z przyciskami, każdy z przypisanym popover zawierającym odpowiednie dane. Niestety, jeden z poparek może zawierać dowolną liczbę wierszy, aw niektórych przypadkach może być częściowo poza rzutnią.keep bootstrap popover inside viewport

Zobacz http://jsfiddle.net/bfd9f/1/ na przykład emisji (kliknij przycisk „Zadania”)

Myślałem, że mogę programowo zmienić popover Top do określonej wartości, gdy ujemna (tj poza rzutnia) i aby to zrobić , Udało mi się już uzyskać odniesienie do pierwszego div popover podczas słuchania zdarzenia show.bs.popover. Niestety, myślę, że ze względu na to, że nie jest on jeszcze renderowany, wydaje się mieć rozmiar (23, 107), podczas gdy powinien być podobny (300, xxx) i pozycja (0, 0).

Czy istnieje sposób rozwiązania tego problemu? może renderowanie popover'u najpierw na ekranie, żeby je zmierzyć? jeśli tak, to jak mam to zrobić?

Dzięki

Odpowiedz

10

Poprawiono w nadchodzącym Bootstrap v3.2.0 wierzę: http://jsfiddle.net/pkP77/1/

Dzięki uprzejmości nowego viewport funkcja wprowadzona w https://github.com/twbs/bootstrap/pull/12328

+0

Dokładnie tego potrzebuję. Nie sądzę, że 3.2 jest już na zewnątrz ... czy to znaczy, że muszę wyciągnąć js z skrzypiec? – SirePi

+0

Możesz pobrać z https://github.com/twbs/bootstrap/tree/master/dist/js – cvrebert

+0

Przepraszamy za opóźnienie, ale byłem zajęty; Próbowałem użyć wersji połączonej, ale miałem problem, mianowicie dlatego, że w tych dniach zmieniłem ustawienie treści bezpośrednio przez $ (obj) .html() na $ (obj). Co się dzieje, to to, że po raz pierwszy otrzymuję poprawnie popover, ale po jego zamknięciu $ (obj) jest usuwane z domingu i nie może być ponownie wyświetlone. Na razie udało mi się połączyć kilka linii od bootstrap 3.2 do 3.1.1 i wygląda na to, że działa poprawnie. Czy jesteś zainteresowany widząc, co zmieniłem? – SirePi

3

Można zawsze zastępują wartości top z popover wykorzystaniem !important To może nie być najlepszy plan długoterminowy, ponieważ może to kolidować z przyszłymi CSS zmienia

.popover { 
     width: 300px !important; 
     top: 0px !important; 
    } 

http://jsfiddle.net/smurphy/x9hnk/

Aktualizacja:

Wyjeżdżasz z imprezy entioned to wydaje się działać.

$('.btn-popover').on('shown.bs.popover', function (event) { 
    //Set timeout to wait for popup div to redraw(animation) 
    setTimeout(function(){ 
     if($('div.popover').css('top').charAt(0) === '-'){ 
      $('div.popover').css('top', '0px'); 
      var buttonTop = $(event.currentTarget).position().top; 
      var buttonHeight = $(event.currentTarget).height(); 
      $('.popover.left>.arrow').css('top', buttonTop + (buttonHeight/2)); 
     } 
    },100); 
}); 

http://jsfiddle.net/smurphy/e6YaY/2/

To wyrównuje strzałkę ze swoim przycisk. enter image description here

+0

już myślałem o tym .. niestety będzie to dotyczyć wszystkich popovers (patrz wpływ na przycisk "Użytkownik"), podczas gdy ja chciałbym zmienić tylko te, które idą w jakiś sposób poza oknem podglądu (to samo może się wydarzyć na dole ... nie wiem jeszcze ile przycisków mam na pasku bocznym). – SirePi

+0

Czy widzisz tę odpowiedź http://stackoverflow.com/a/10937083/1217018 –

+0

Tak, zrobiłem. Dałem mu kolejną lekturę na wypadek, gdybym coś przeoczył, ale nadal nie jest to coś, czego potrzebuję. Nawet jeśli użyjesz funkcji, funkcja ta może zwrócić tylko jedną z obsługiwanych wartości dla pozycjonowania etykiety narzędzia względem elementu uruchamiającego tę funkcję. Dla mnie nie ma wyboru: trzeba go zostawić. – SirePi

Powiązane problemy