আমি আমার দর্শকদের উচ্চ মানের ছবিগুলি দেখার ক্ষমতা সরবরাহ করতে চাই, উইন্ডোর আকার সনাক্ত করার কোনও উপায় আছে কি?
বা আরও ভাল, জাভাস্ক্রিপ্ট সহ ব্রাউজারের ভিউপোর্টের আকার? এখানে সবুজ অঞ্চল দেখুন:
getComputedStyle
প্রসারিত html
ট্যাগটি দেখতে পারেন ।
আমি আমার দর্শকদের উচ্চ মানের ছবিগুলি দেখার ক্ষমতা সরবরাহ করতে চাই, উইন্ডোর আকার সনাক্ত করার কোনও উপায় আছে কি?
বা আরও ভাল, জাভাস্ক্রিপ্ট সহ ব্রাউজারের ভিউপোর্টের আকার? এখানে সবুজ অঞ্চল দেখুন:
getComputedStyle
প্রসারিত html
ট্যাগটি দেখতে পারেন ।
উত্তর:
@media (width)
এবং @media (height)
মান const vw = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);
const vh = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);
window.innerWidth
এবং .innerHeight
@media (width)
এবং @media (height)
এতে স্ক্রোলবারগুলি অন্তর্ভুক্ত রয়েছেinitial-scale
এবং জুম বৈচিত্রগুলির কারণে মোবাইল মানগুলি পিপিকে ভিজ্যুয়াল ভিউপোর্টকে কল হিসাবে ভুলভাবে স্কেল করতে এবং এর চেয়ে ছোট হতে পারে@media
মানগুলিরundefined
আইই 8- এdocument.documentElement.clientWidth
এবং .clientHeight
@media (width)
এবং @media (height)
যখন নেই স্ক্রোলবার না থাকেjQuery(window).width()
যা jQuery কল হিসাবে একই ব্রাউজার ভিউপোর্টmatchMedia
কোনও ইউনিটে সুনির্দিষ্ট মাত্রা পেতে প্রকৃত ব্যবহার$
সঙ্গে verge
। আপনি যদি jQuery এর সাথে সংহত করতে চান তবে করুন jQuery.extend(verge)
। দেখুন: verge.airve.com/#static
<!DOCTYPE html>
কোডটি কাজ করার জন্য আপনার অবশ্যই পৃষ্ঠার শীর্ষে থাকতে হবে ।
document.documentElement.clientHeight
ফেরৎ পৃষ্ঠা উচ্চতা , যখন window.innerHeight
আয় ভিউপোর্ট উচ্চতা । বড় পার্থক্য.
$(window).width()
এবং $(window).height()
$(window).height();
536 ফেরৎ, যেহেতু $("html").height();
আয় 10599
আপনি উইন্ডো.নিরউইথ এবং উইন্ডো ।
document.documentElement.clientWidth
আরও সঠিক এবং আরও ব্যাপকভাবে সমর্থিতwindow.innerWidth
document.documentElement.clientWidth
, আমাকে ভিউপোর্টের প্রস্থ দেয় যখন উইন্ডো। হ্যাঁ, এই রাস্তা।
আপনি যদি jQuery ব্যবহার না করেন তবে এটি কুশ্রী হয়ে যায়। এখানে একটি স্নিপেট যা সমস্ত নতুন ব্রাউজারে কাজ করা উচিত। আইইতে কুইর্কস মোড এবং স্ট্যান্ডার্ড মোডে আচরণটি আলাদা different এটি এটি যত্ন নেয়।
var elem = (document.compatMode === "CSS1Compat") ?
document.documentElement :
document.body;
var height = elem.clientHeight;
var width = elem.clientWidth;
clientHeight
উপর document.documentElement
উপাদান, যা আপনি ভিউপোর্ট আকার দিতে হবে। নথির আকার পেতে, আপনাকে এটি করতে হবে document.body.clientHeight
। চেতন যেমন ব্যাখ্যা করেছেন, এই আচরণটি আধুনিক ব্রাউজারগুলিতে প্রযোজ্য। এটি পরীক্ষা করা সহজ। কেবল একটি কনসোল খুলুন এবং document.documentElement.clientHeight
কয়েকটি খোলা ট্যাবগুলিতে টাইপ করুন।
আমি জানি এটির একটি গ্রহণযোগ্য উত্তর আছে, তবে আমি এমন পরিস্থিতিতে পড়েছিলাম যেখানে clientWidth
কাজ হয়নি, কারণ আইফোন (কমপক্ষে খনি) 320 নয় 980 ফিরিয়েছিল, তাই আমি ব্যবহার করেছিwindow.screen.width
। আমি বিদ্যমান সাইটে কাজ করছিলাম, "প্রতিক্রিয়াশীল" হয়েছি এবং বড় ব্রাউজারগুলিকে আলাদা মেটা-ভিউপোর্ট ব্যবহার করতে বাধ্য করা দরকার force
আশা করি এটি কাউকে সহায়তা করে, এটি নিখুঁত নাও হতে পারে তবে এটি আইও এবং অ্যান্ড্রয়েডে আমার পরীক্ষায় কাজ করে।
//sweet hack to set meta viewport for desktop sites squeezing down to mobile that are big and have a fixed width
//first see if they have window.screen.width avail
(function() {
if (window.screen.width)
{
var setViewport = {
//smaller devices
phone: 'width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no',
//bigger ones, be sure to set width to the needed and likely hardcoded width of your site at large breakpoints
other: 'width=1045,user-scalable=yes',
//current browser width
widthDevice: window.screen.width,
//your css breakpoint for mobile, etc. non-mobile first
widthMin: 560,
//add the tag based on above vars and environment
setMeta: function () {
var params = (this.widthDevice <= this.widthMin) ? this.phone : this.other;
var head = document.getElementsByTagName("head")[0];
var viewport = document.createElement('meta');
viewport.setAttribute('name','viewport');
viewport.setAttribute('content',params);
head.appendChild(viewport);
}
}
//call it
setViewport.setMeta();
}
}).call(this);
আমি ক্রস ব্রাউজারের পথটি দেখেছি এবং পেয়েছি:
function myFunction(){
if(window.innerWidth !== undefined && window.innerHeight !== undefined) {
var w = window.innerWidth;
var h = window.innerHeight;
} else {
var w = document.documentElement.clientWidth;
var h = document.documentElement.clientHeight;
}
var txt = "Page size: width=" + w + ", height=" + h;
document.getElementById("demo").innerHTML = txt;
}
<!DOCTYPE html>
<html>
<body onresize="myFunction()" onload="myFunction()">
<p>
Try to resize the page.
</p>
<p id="demo">
</p>
</body>
</html>
আমি জাভাস্ক্রিপ্টে একটি সুনির্দিষ্ট উত্তর পেতে সক্ষম হয়েছি: ডিফিনিটিভ গাইড, ও'রিলির 6 তম সংস্করণ, পৃষ্ঠা p 391:
এই সমাধানটি কুইর্কস মোডেও কাজ করে, যখন রায়ানভ এবং স্কটএভারেন্ডেনের বর্তমান সমাধানটি করে না।
function getViewportSize(w) {
// Use the specified window or the current window if no argument
w = w || window;
// This works for all browsers except IE8 and before
if (w.innerWidth != null) return { w: w.innerWidth, h: w.innerHeight };
// For IE (or any browser) in Standards mode
var d = w.document;
if (document.compatMode == "CSS1Compat")
return { w: d.documentElement.clientWidth,
h: d.documentElement.clientHeight };
// For browsers in Quirks mode
return { w: d.body.clientWidth, h: d.body.clientHeight };
}
লাইনটি কেন if (document.compatMode == "CSS1Compat")
হয় না তা অবাক করার পরেও if (d.compatMode == "CSS1Compat")
, সবকিছু ভাল দেখাচ্ছে।
documentElement.clientWidth
আইওএসে ডিভাইস ওরিয়েন্টেশন পরিবর্তনের বিষয়ে প্রতিক্রিয়া জানায় না। খ) ভার্চুয়াল পিক্সেলের পরিবর্তে শারীরিক পিক্সেল গণনা (ব্যবহারিকভাবে অকেজো) প্রদর্শন করে
আপনি যদি মোবাইলে ভার্চুয়াল পিক্সেলগুলিতে সঠিক মান দেয় এমন নন-জিকিউরি সমাধান সন্ধান করছেন এবং আপনি মনে করেন যে এটি সহজ window.innerHeight
বা document.documentElement.clientHeight
আপনার সমস্যার সমাধান করতে পারে তবে দয়া করে প্রথমে এই লিঙ্কটি অধ্যয়ন করুন: https://tripleodeon.com/assets/2011/12/ table.html
বিকাশকারী ভাল পরীক্ষা করেছেন যা সমস্যাটি প্রকাশ করে: আপনি অ্যান্ড্রয়েড / আইওএস, ল্যান্ডস্কেপ / প্রতিকৃতি, সাধারণ / উচ্চ ঘনত্বের প্রদর্শনগুলির জন্য অপ্রত্যাশিত মান পেতে পারেন।
আমার বর্তমান উত্তরটি এখনও রূপালী বুলেট নয় (// টুডো), বরং যারা এই থ্রেড থেকে প্রদত্ত যে কোনও সমাধান খুব দ্রুত প্রোডাকশন কোডে কপি-পেস্ট করতে যাচ্ছেন তাদের জন্য একটি সতর্কতা।
আমি মোবাইলে ভার্চুয়াল পিক্সেলগুলিতে পৃষ্ঠা প্রস্থের সন্ধান করছিলাম এবং আমি একমাত্র কার্যকরী কোডটি পেয়েছি (অপ্রত্যাশিতভাবে!) window.outerWidth
। আমি পরে যখন সময় নেভিগেশন বার বাদে উচ্চতা প্রদান সঠিক সমাধান জন্য এই টেবিলটি পরীক্ষা করব।
এই কোডটি http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/ থেকে এসেছে
function viewport() {
var e = window, a = 'inner';
if (!('innerWidth' in window )) {
a = 'client';
e = document.documentElement || document.body;
}
return { width : e[ a+'Width' ] , height : e[ a+'Height' ] };
}
এনবি: প্রস্থ পড়তে, ব্যবহার করুন console.log('viewport width'+viewport().width);
window.innerHeight
এবং মধ্যে পার্থক্য আছে document.documentElement.clientHeight
। প্রথমটিতে অনুভূমিক স্ক্রোলবারের উচ্চতা অন্তর্ভুক্ত।
ডাব্লু 3 সি মানের সাথে সঙ্গতিপূর্ণ একটি সমাধান হ'ল স্বচ্ছ ডিভ তৈরি করা (উদাহরণস্বরূপ জাভাস্ক্রিপ্ট সহ গতিময়), এর প্রস্থ এবং উচ্চতা 100vw / 100vh (ভিউপোর্ট ইউনিট) এ সেট করুন এবং তারপরে অফসেটউইথ এবং অফসেটহাইট পাবেন get এর পরে, উপাদানটি আবার সরানো যেতে পারে। এটি পুরানো ব্রাউজারগুলিতে কাজ করবে না কারণ ভিউপোর্ট ইউনিটগুলি তুলনামূলকভাবে নতুন, তবে আপনি যদি সেগুলির পরিবর্তে তবে (শীঘ্রই হতে হবে) মান সম্পর্কে চিন্তা না করেন তবে আপনি অবশ্যই এই পথে যেতে পারেন:
var objNode = document.createElement("div");
objNode.style.width = "100vw";
objNode.style.height = "100vh";
document.body.appendChild(objNode);
var intViewportWidth = objNode.offsetWidth;
var intViewportHeight = objNode.offsetHeight;
document.body.removeChild(objNode);
অবশ্যই, আপনিজেজ নোড.স্টাইল.পজিশন = "স্থির" সেট করতে পারেন এবং তারপরে প্রস্থ / উচ্চতা হিসাবে 100% ব্যবহার করতে পারেন - এর একই প্রভাব থাকতে হবে এবং কিছুটা হলেও সামঞ্জস্যতা উন্নত করতে হবে। এছাড়াও, স্থির স্থানে অবস্থান নির্ধারণ করা সাধারণভাবে একটি ভাল ধারণা হতে পারে, কারণ অন্যথায় ডিভি অদৃশ্য হয়ে যাবে তবে কিছু জায়গা খায় যা স্ক্রোলবারগুলি প্রদর্শিত হবে etc.
এইভাবে আমি এটি করি, আমি এটি 8 -> 10, এফএফ 35, ক্রোম 40 এ চেষ্টা করেছি, এটি সমস্ত আধুনিক ব্রাউজারগুলিতে (উইন্ডো। অভ্যন্তরীণ প্রস্থ) এটি পাশাপাশি মসৃণভাবে কাজ করে, যে কোনও সমস্যা (যেমন ওভারফ্লোর কারণে ঝলকানি: "লুকানো"), দয়া করে এটি প্রতিবেদন করুন। আমি ভিউপোর্টের উচ্চতার বিষয়ে সত্যই আগ্রহী নই কারণ আমি এই ফাংশনটি কেবলমাত্র কিছু প্রতিক্রিয়াশীল সরঞ্জামকে কাজে লাগিয়ে তৈরি করেছি, তবে এটি বাস্তবায়িত হতে পারে। আশা করি এটি সাহায্য করবে, আমি মন্তব্য এবং পরামর্শগুলির প্রশংসা করি।
function viewportWidth () {
if (window.innerWidth) return window.innerWidth;
var
doc = document,
html = doc && doc.documentElement,
body = doc && (doc.body || doc.getElementsByTagName("body")[0]),
getWidth = function (elm) {
if (!elm) return 0;
var setOverflow = function (style, value) {
var oldValue = style.overflow;
style.overflow = value;
return oldValue || "";
}, style = elm.style, oldValue = setOverflow(style, "hidden"), width = elm.clientWidth || 0;
setOverflow(style, oldValue);
return width;
};
return Math.max(
getWidth(html),
getWidth(body)
);
}