2017-10-31 47 views
5

Próbuję dowiedzieć się, jak ustawić górne i lewe wartości w stosunku do selected_element (aktywne w momencie wyskakiwania wyskakujących okienek) podobne do etykiety narzędzia. Próbowałem używać $(). Position() z jQuery, ale to nie zastępuje domyślnego 0,0, które ustawiłem z CSS.Wiążąca pozycja popup do aktywnego pola tekstowego

Oto JSFiddle: https://jsfiddle.net/sethkillian2/cd6agg73/3/ Przytrzymaj a, c, e, i, o lub u, aby otworzyć menu.

Również tutaj jest częścią mojej próbie:

$(popup).position({ 
    of: $(activeElement), 
    my: 'left top', 
    at: 'left top', 
    offset: '0 0' 
}); 
$('body').append(popup); 

Zmiana atrybutu pozycji do niczego oprócz absolutna nie wydają się działać albo ponieważ wówczas menu znak rozszerza. Próbowałem również uzyskać element po identyfikatorze bezpośrednio po dodaniu go za pomocą $ ("# charMap"). Position (...).

Aktualizacja: Dla tego, co jest warte, próbowałem również użyć komponentu textarea-caret-position (https://github.com/component/textarea-caret-position), ale nie wydaje się to być dokładne.

+0

Nie pewny co Oczekiwany wynik to? – guest271314

+0

Charmap powinien pojawić się powyżej aktywnego pola tekstowego, który jest zapisany jako activeElement. –

Odpowiedz

0

Właściwości margin-top i margin-left są ustawione na #ta w CSS; można użyć .css() pobrać i ustawić te same właściwości popup

$(popup).css($(activeElement).css(["marginTop", "marginLeft"])); 

jsfiddle https://jsfiddle.net/cd6agg73/9/

+0

Jedyny problem polega na tym, że jeśli istnieje akapit tekstu lub coś ponad nim, to już nie działa. Szukam rozwiązania, które nie opiera się na marginesach lub dopełnieniu, ale raczej na rzeczywistej pozycji. –

+0

Co rozumiesz przez "rzeczywistą pozycję"? 'var props = $ (activeElement) .css ([" marginTop "," marginLeft "]); props.marginTop = parseFloat (props.marginTop) - ($ (activeElement) .height() * 2.5) + "px"; $ (popup) .css (rekwizyty); '? Lub używając '.getBoundingClientRect()' 'var {top, left} = activeElement.getBoundingClientRect(); $ (popup) .css ({top, left}); 'https://jsfiddle.net/cd6agg73/12/? Który powinien renderować ten sam wynik co kod w odpowiedzi – guest271314