Próbuję uzyskać pozycję elementu w oknie w następujący sposób:
var link = $(element);
var offset = link.offset();
var top = offset.top;
var left = offset.left;
var bottom = $(window).height() - link.height();
bottom = offset.top - bottom;
var right = $(window).width() - link.width();
right = offset.left - right;
Jednak dół i prawo mają -
przed sobą ... Dlaczego tak jest? ponieważ liczby są poprawne, po prostu NIE powinny być minusami.
Można użyć .position () dla tego
var link = $(element); var position = link.position(); //cache the position var right = $(window).width() - position.left - link.width(); var bottom = $(window).height() - position.top - link.height();
źródło
windows.width()
i podobnych do dalszych obliczeń.Myślę
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <div>Testing</div> <div id="result" style="margin:1em 4em; background:rgb(200,200,255); height:500px"></div> <div style="background:rgb(200,255,200); height:3000px; width:5000px;"></div> <script> (function(){ var link=$("#result"); var top = link.offset().top; // position from $(document).offset().top var bottom = top + link.height(); // position from $(document).offset().top var left = link.offset().left; // position from $(document).offset().left var right = left + link.width(); // position from $(document).offset().left var bottomFromBottom = $(document).height() - bottom; // distance from document's bottom var rightFromRight = $(document).width() - right; // distance from document's right var str=""; str+="top: "+top+"<br>"; str+="bottom: "+bottom+"<br>"; str+="left: "+left+"<br>"; str+="right: "+right+"<br>"; str+="bottomFromBottom: "+bottomFromBottom+"<br>"; str+="rightFromRight: "+rightFromRight+"<br>"; link.html(str); })(); </script>
Rezultatem są
top: 44 bottom: 544 left: 72 right: 1277 bottomFromBottom: 3068 rightFromRight: 3731
w mojej przeglądarce Chrome.
Gdy dokument jest przewijalny,
$(window).height()
zwraca wysokość okna przeglądarki, a nie szerokość dokumentu, którego niektóre części są ukryte w przewijaniu. Zobacz http://api.jquery.com/height/ .źródło
Oto funkcja jquery, która zwraca obiekt dowolnej klasy lub identyfikatora na stronie
var elementPosition = function(idClass) { var element = $(idClass); var offset = element.offset(); return { 'top': offset.top, 'right': offset.left + element.outerWidth(), 'bottom': offset.top + element.outerHeight(), 'left': offset.left, }; }; console.log(elementPosition('#my-class-or-id'));
źródło
Odpowiedź Vanilla Javascript
var c = document.getElementById("myElement").getBoundingClientRect(); var bot = c.bottom; var rgt = c.right;
Aby było jasne, element może być wszystkim, pod warunkiem, że przypisałeś mu identyfikator
<img>
<div>
<p>
itp.na przykład
<img id='myElement' src='/img/logout.png' className='logoutImg img-button' alt='Logout' />
źródło