আমি ব্রাউজারের ভিউপোর্ট (ভিউপোর্টে যেখানে পৃষ্ঠাটি প্রদর্শিত হয়, পুরো পৃষ্ঠাটি নয়) এর সাথে সম্পর্কিত কোনও উপাদানের অবস্থান পেতে চাই। এটি কীভাবে জাভাস্ক্রিপ্টে করা যেতে পারে?
অনেক ধন্যবাদ
আমি ব্রাউজারের ভিউপোর্ট (ভিউপোর্টে যেখানে পৃষ্ঠাটি প্রদর্শিত হয়, পুরো পৃষ্ঠাটি নয়) এর সাথে সম্পর্কিত কোনও উপাদানের অবস্থান পেতে চাই। এটি কীভাবে জাভাস্ক্রিপ্টে করা যেতে পারে?
অনেক ধন্যবাদ
উত্তর:
বিদ্যমান উত্তরগুলি এখন পুরানো। নেটিভ getBoundingClientRect()পদ্ধতিটি বেশ কিছুক্ষণ ধরে চলেছে, এবং প্রশ্নটি যা জিজ্ঞাসা করে ঠিক তা করে। এছাড়াও এটি সমস্ত ব্রাউজার জুড়ে সমর্থিত (IE 5 সহ, এটি মনে হয়!)
এমডিএন পৃষ্ঠা থেকে :
ফেরত মূল্য TextRectangle বস্তু, যার শুধুমাত্র পাঠযোগ্য রয়েছে, উপরের বাম, ডান এবং নীচের বৈশিষ্ট্য সীমান্ত বাক্স বর্ণনা, পিক্সেলে, শীর্ষ-বাম সাথে আছেন আপেক্ষিক ভিউপোর্ট উপরে বাম ।
আপনি এটির মতো ব্যবহার করুন:
var viewportOffset = el.getBoundingClientRect();
// these are relative to the viewport, i.e. the window
var top = viewportOffset.top;
var left = viewportOffset.left;
getBoundingClientRect().topআমার আইই ১১-তে নেই এটি 0 প্রদান করে you
আমার ক্ষেত্রে, কেবল স্ক্রোলিং সম্পর্কিত নিরাপদ থাকার জন্য, আমি সমীকরণে উইন্ডো.স্ক্রোলটি যুক্ত করেছি:
var element = document.getElementById('myElement');
var topPos = element.getBoundingClientRect().top + window.scrollY;
var leftPos = element.getBoundingClientRect().left + window.scrollX;
এটি আমাকে নথিতে উপাদানটির আসল আপেক্ষিক অবস্থান পেতে দেয়, এমনকি এটি স্ক্রল করা থাকলেও।
getBoundingClientRect().topআমার আই 11 এ নেই এটি 0 দেয় returns আপনার কোনও সমাধান আছে।
window.scrollY || window.pageYOffsetসহায়তায় উন্নতি করতে পারে
সম্পাদনা করুন: পৃষ্ঠা স্ক্রোলিংয়ের জন্য অ্যাকাউন্টে কিছু কোড যুক্ত করুন।
function findPos(id) {
var node = document.getElementById(id);
var curtop = 0;
var curtopscroll = 0;
if (node.offsetParent) {
do {
curtop += node.offsetTop;
curtopscroll += node.offsetParent ? node.offsetParent.scrollTop : 0;
} while (node = node.offsetParent);
alert(curtop - curtopscroll);
}
}
আইডি আর্গুমেন্ট হল সেই উপাদানটির আইডি, যার অফসেটটি আপনি চান। একটি quirksmode পোস্ট থেকে অভিযোজিত ।
var element = document.querySelector('selector');
var bodyRect = document.body.getBoundingClientRect(),
elemRect = element.getBoundingClientRect(),
offset = elemRect.top - bodyRect.top;
আপনি চেষ্টা করতে পারেন:
node.offsetTop - window.scrollY
এটি ভিউপোর্ট মেটা ট্যাগ সংজ্ঞায়িত করে অপেরাতে কাজ করে।
offsetTop এটি নিকটস্থ অবস্থানের উপাদানটির সাথে সম্পর্কিত। যা পৃষ্ঠার কাঠামোর উপর নির্ভর করে মূল উপাদান হতে পারে বা নাও হতে পারে।
jQuery এটি বেশ মার্জিতভাবে প্রয়োগ করে। আপনি যদি jQuery এর উত্সটি লক্ষ্য করেন তবে আপনি দেখতে offsetপাবেন এটি মূলত এটি কীভাবে কার্যকর হয়:
var rect = elem.getBoundingClientRect();
var win = elem.ownerDocument.defaultView;
return {
top: rect.top + win.pageYOffset,
left: rect.left + win.pageXOffset
};
এই পৃষ্ঠার ফাংশনটি ব্রাউজার ভিউ পোর্টের সাথে সম্পর্কিত কোনও উত্তীর্ণ উপাদানটির শীর্ষ, বাম, উচ্চতা এবং প্রস্থের সমন্বয়গুলির সাথে একটি আয়তক্ষেত্র প্রদান করবে।
localToGlobal: function( _el ) {
var target = _el,
target_width = target.offsetWidth,
target_height = target.offsetHeight,
target_left = target.offsetLeft,
target_top = target.offsetTop,
gleft = 0,
gtop = 0,
rect = {};
var moonwalk = function( _parent ) {
if (!!_parent) {
gleft += _parent.offsetLeft;
gtop += _parent.offsetTop;
moonwalk( _parent.offsetParent );
} else {
return rect = {
top: target.offsetTop + gtop,
left: target.offsetLeft + gleft,
bottom: (target.offsetTop + gtop) + target_height,
right: (target.offsetLeft + gleft) + target_width
};
}
};
moonwalk( target.offsetParent );
return rect;
}
function inViewport(element) {
let bounds = element.getBoundingClientRect();
let viewWidth = document.documentElement.clientWidth;
let viewHeight = document.documentElement.clientHeight;
if (bounds['left'] < 0) return false;
if (bounds['top'] < 0) return false;
if (bounds['right'] > viewWidth) return false;
if (bounds['bottom'] > viewHeight) return false;
return true;
}
সবগুলো উত্তরের জন্য ধন্যবাদ। দেখে মনে হচ্ছে প্রোটোটাইপের ইতিমধ্যে একটি ফাংশন রয়েছে যা এটি (পৃষ্ঠা () ফাংশন) করে। ফাংশনের উত্স কোডটি দেখে আমি দেখতে পেলাম যে এটি প্রথমে পৃষ্ঠার (অর্থাৎ ডকুমেন্টের শীর্ষের) তুলনায় উপাদানটির অফসেট অবস্থান গণনা করে তারপরে স্ক্রোলটপটি বিয়োগ করে। আরও বিশদের জন্য প্রোটোটাইপের উত্স কোডটি দেখুন।
আমি btn1ওয়েব পৃষ্ঠায় একটি উপাদান উপস্থিত রয়েছে বলে ধরে নিচ্ছি এবং jQuery এর অন্তর্ভুক্ত রয়েছে। এটি ক্রোম, ফায়ারফক্স, আইআই> = 9 এবং এজের সমস্ত আধুনিক ব্রাউজার জুড়ে কাজ করেছে। jQuery কেবলমাত্র নথির সাথে সম্পর্কিত অবস্থান নির্ধারণ করতে ব্যবহৃত হচ্ছে।
var screenRelativeTop = $("#btn1").offset().top - (window.scrollY ||
window.pageYOffset || document.body.scrollTop);
var screenRelativeLeft = $("#btn1").offset().left - (window.scrollX ||
window.pageXOffset || document.body.scrollLeft);
কখনও কখনও getBoundingClientRect()অবজেক্টের সম্পত্তির মান IE এর জন্য 0 দেখায়। display = 'block'সেক্ষেত্রে আপনাকে উপাদানটির জন্য সেট করতে হবে । অফসেট পেতে আপনি নীচের কোডটি সমস্ত ব্রাউজারের জন্য ব্যবহার করতে পারেন।
JQuery কার্যকারিতা প্রসারিত করুন:
(function($) {
jQuery.fn.weOffset = function () {
var de = document.documentElement;
$(this).css("display", "block");
var box = $(this).get(0).getBoundingClientRect();
var top = box.top + window.pageYOffset - de.clientTop;
var left = box.left + window.pageXOffset - de.clientLeft;
return { top: top, left: left };
};
}(jQuery));
ব্যবহার:
var elementOffset = $("#" + elementId).weOffset();