2010-06-15 13 views
68

यह शायद एक बहुत ही सरल सवाल है, लेकिन मैं jQuery में किसी तत्व का सही ऑफ़सेट प्राप्त करने के बारे में कैसे जा सकता हूं?किसी तत्व का सही ऑफसेट कैसे प्राप्त करें? - jQuery

मैं कर सकते हैं:

$("#whatever").offset().left; 

और यह वैध है।

लेकिन ऐसा लगता है कि:

$("#whatever").offset().right 

अनिर्धारित रहता है।

तो यह jQuery में इसे कैसे पूरा करता है?

धन्यवाद !!

उत्तर

127

एलेक्स, गैरी:

के रूप में अनुरोध किया है, यहाँ मेरी टिप्पणी एक जवाब के रूप पोस्ट किया जाता है:

var rt = ($(window).width() - ($whatever.offset().left + $whatever.outerWidth())); 

दे मुझे पता है के लिए धन्यवाद।

+0

यह सीएसएस ट्रांसफॉर्म के साथ काम नहीं करता है, ऑफ़सेट ट्रांसफॉर्म से प्रभावित होगा लेकिन बाहरी चौड़ाई (और चौड़ाई) नहीं होगी। –

+2

यह खिड़की के दाहिने तरफ से ऑफसेट है। विंडो के बाईं तरफ ऑफसेट के लिए, सीडीजेड [उत्तर] देखें (http://stackoverflow.com/a/5643921/675721)। –

+0

किसी तत्व का दायां-किनारा अधिक "मूल रूप से" $ $ जो भी हो सकता है [0] .getBoundingClientRect()। दाएं '। यह खिड़की के बाएं किनारे के सापेक्ष है। – pstanton

27
var $whatever  = $('#whatever'); 
var ending_right  = ($(window).width() - ($whatever.offset().left + $whatever.outerWidth())); 

संदर्भ: .outerWidth()

+1

मुझे लगता है कि उन्हें जोड़ने के लिए और फिर शून्य से 1. जरूरत है चौड़ाई 2 है, तो छोड़ दिया 10 पर है , और सही 12 पर नहीं है लेकिन 11. –

+30

यह एक गलत उत्तर है। सीएसएस में, "बाएं" का अर्थ है "विंडो/पैरेंट के बाईं ओर से तत्व के बाएं बिंदु के ऑफसेट", और "दाएं" का अर्थ है "विंडो/माता-पिता के दाईं ओर से तत्व के दाएं बिंदु का ऑफसेट "। तो, सही उत्तर होगा: 'var rt = ($ (window) .width() - ($ जो भी। ऑफसेट()। बाएं + $ जो भी .उटरविड्थ());' –

+0

लोगों ने यह क्यों नहीं देखा यह गलत जवाब है: 0 –

14

शायद मैं आपके सवाल का गलत समझ रही है, लेकिन ऑफसेट आप दो चर देने के लिए माना जाता है: एक क्षैतिज और एक ऊर्ध्वाधर। यह तत्व की स्थिति को परिभाषित करता है। तो क्या आप के लिए देख रहे हैं:

$("#whatever").offset().left 

और

$("#whatever").offset().top 

आप को पता है की जरूरत है, जहां अपने तत्व की सही सीमा है, तो आप का उपयोग करना चाहिए:

$("#whatever").offset().left + $("#whatever").outerWidth() 
+0

यह तत्व का अधिकार प्राप्त करने के लिए एक चाल है। धन्यवाद ग्रेग! – n2lose

7

ग्रेग ने जो कुछ कहा:

$ ("# जो भी") ऑफसेट()। बाएं + $ ("# जो कुछ भी ")। बाहरी विड्थ()

यह कोड बाईं ओर से संबंधित सही स्थिति प्राप्त करेगा। इस प्रकार इरादा (जब सीएसएस right संपत्ति का उपयोग कर की तरह) सही करने के लिए दाईं ओर सापेक्ष स्थिति पाने के लिए था तो कोड के अतिरिक्त आवश्यक है:।

$ ("# parent_container") innerWidth () - ($ ("# जो कुछ भी") ऑफसेट() बाईं + $ ("# जो कुछ भी") outerWidth())

इस कोड एनिमेशन में उपयोगी है आप सही पक्ष के रूप में स्थापित करने के लिए है, जहां।।। एक निश्चित एंकर जब आप प्रारंभ में सीएसएस में right संपत्ति सेट नहीं कर सकते हैं।

3

ब्रेंडन क्रॉफर्ड का यहां सबसे अच्छा जवाब था (टिप्पणी में), इसलिए मैं इसे तब तक उत्तर में ले जाऊंगा जब तक वह ऐसा नहीं करता (और शायद थोड़ा विस्तार कर सकता है)।

var offset = $('#whatever').offset(); 

offset.right = $(window).width() - (offset.left + $('#whatever').outerWidth(true)); 
offset.bottom = $(window).height() - (offset.top + $('#whatever').outerHeight(true)); 
3

असल में ये केवल तभी काम करते हैं जब विंडो शीर्ष बाएं स्थिति से स्क्रॉल नहीं होती है।
आप विंडो स्क्रॉल मूल्यों घटाना प्राप्त करने के लिए एक ऑफसेट कि पुनः स्थिति तत्वों के लिए उपयोगी है ताकि वे पृष्ठ पर रहने:

var offset = $('#whatever').offset(); 

offset.right = ($(window).width() + $(window).scrollLeft()) - (offset.left + $('#whatever').outerWidth(true)); 
offset.bottom = ($(window).height() + $(window).scrollTop()) - (offset.top + $('#whatever').outerHeight(true)); 
1

एक div/table (left) = $("#whatever").offset().left; का लंगर बिंदु हो रही है - ठीक है!

div/table (right) का एंकर पॉइंट प्राप्त करना आप नीचे दिए गए कोड का उपयोग कर सकते हैं।

$("#whatever").width(); 
2

एक देशी डोम एपीआई कि बॉक्स से बाहर प्राप्त करते हैं, नहीं है - getBoundingClientRect:

document.querySelector("#whatever").getBoundingClientRect().right 
+1

लेकिन GetBoundingClientRect दस्तावेज़ के सापेक्ष व्यूपोर्ट के सापेक्ष रिटर्न देता है, जो ऑफ़सेट() प्रदान करता है। –

संबंधित मुद्दे