Как получить windowWidth
, windowHeight
, pageWidth
, pageHeight
, screenWidth
, screenHeight
, pageX
, pageY
, screenX
, screenY
, которые будут работать во всех основных браузерах?
Как получить windowWidth
, windowHeight
, pageWidth
, pageHeight
, screenWidth
, screenHeight
, pageX
, pageY
, screenX
, screenY
, которые будут работать во всех основных браузерах?
Если вы используете jQuery, вы можете получить размер окна или документа, используя методы jQuery:
$(window).height(); // returns height of browser viewport
$(document).height(); // returns height of HTML document (same as pageHeight in screenshot)
$(window).width(); // returns width of browser viewport
$(document).width(); // returns width of HTML document (same as pageWidth in screenshot)
Для размера экрана вы можете использовать объект screen
следующим образом:
screen.height;
screen.width;
Это все, что вам нужно знать:
http: // andylangton. сотрудничество. uk / статьи / javascript / get-viewport-size-javascript /
, но вкратце:
var w = window,
d = document,
e = d.documentElement,
g = d.getElementsByTagName('body')[0],
x = w.innerWidth || e.clientWidth || g.clientWidth,
y = w.innerHeight|| e.clientHeight|| g.clientHeight;
alert(x + ' × ' + y);
Вот кросс-браузерное решение с чистым JavaScript ( Источник ):
var width = window.innerWidth
|| document.documentElement.clientWidth
|| document.body.clientWidth;
var height = window.innerHeight
|| document.documentElement.clientHeight
|| document.body.clientHeight;
Не-jQuery способ получить доступное измерение экрана. window.screen.width/height
уже выставлен, но для отзывчивости веб-дизайна и полноты я думаю стоит упомянуть эти атрибуты:
alert(window.screen.availWidth);
alert(window.screen.availHeight);
http: // www. QuirksMode. орг / дом / w3c_cssom. html # t10 :
айдено в ширину и в высоту - доступная ширина и высота экран (исключая панели задач ОС и тому подобное).
Но когда мы говорим об адаптивных экранах и если по какой-то причине мы хотим справиться с этим с помощью jQuery,
window.innerWidth, window.innerHeight
дает правильное измерение. Даже это убирает лишнее пространство полосы прокрутки, и нам не нужно беспокоиться о корректировке этого пространства :)
function wndsize(){
var w = 0;var h = 0;
//IE
if(!window.innerWidth){
if(!(document.documentElement.clientWidth == 0)){
//strict mode
w = document.documentElement.clientWidth;h = document.documentElement.clientHeight;
} else{
//quirks mode
w = document.body.clientWidth;h = document.body.clientHeight;
}
} else {
//w3c
w = window.innerWidth;h = window.innerHeight;
}
return {width:w,height:h};
}
function wndcent(){
var hWnd = (arguments[0] != null) ? arguments[0] : {width:0,height:0};
var _x = 0;var _y = 0;var offsetX = 0;var offsetY = 0;
//IE
if(!window.pageYOffset){
//strict mode
if(!(document.documentElement.scrollTop == 0)){offsetY = document.documentElement.scrollTop;offsetX = document.documentElement.scrollLeft;}
//quirks mode
else{offsetY = document.body.scrollTop;offsetX = document.body.scrollLeft;}}
//w3c
else{offsetX = window.pageXOffset;offsetY = window.pageYOffset;}_x = ((wndsize().width-hWnd.width)/2)+offsetX;_y = ((wndsize().height-hWnd.height)/2)+offsetY;
return{x:_x,y:_y};
}
var center = wndcent({width:350,height:350});
document.write(center.x+';
');
document.write(center.y+';
');
document.write('
');
Вы также можете получить ширину и высоту окна, избегая панелей инструментов браузера и других вещей. Это реальная полезная область в окне браузера .
Для этого используйте: window.innerWidth
и window.innerHeight
свойства ( см. Документ в w3schools ).
В большинстве случаев лучше всего будет, например, отобразить идеально центрированный плавающий модальный диалог. Это позволяет вам рассчитывать позиции на окне, независимо от того, какое разрешение ориентации или размера окна использует браузер.
Чтобы проверить высоту и ширину текущей загруженной страницы любого веб-сайта, используйте «console» или после нажатия «Inspect» .
, шаг 1 : щелкните правой кнопкой мыши, выберите «Проверить», а затем нажмите «Консоль»
шаг 2 : Убедитесь, что экран вашего браузера не находится в режиме «Развернуть». Если экран браузера находится в режиме «Развернуть», необходимо сначала нажать кнопку «Развернуть» (присутствует в правом или левом верхнем углу) и отменить ее.
шаг 3 : Теперь напишите следующее после знака «больше» ('& gt;') i. е.
> window.innerWidth
output : your present window width in px (say 749)
> window.innerHeight
output : your present window height in px (say 359)
Если вам нужно действительно пуленепробиваемое решение для ширины и высоты документа (pageWidth
и pageHeight
на рисунке), вы можете рассмотреть возможность использования моего плагина, jQuery. размер документа .
У него только одна цель: всегда возвращать правильный размер документа, даже в тех случаях, когда jQuery и другие методы завершаются с ошибкой . Несмотря на его название, вам не обязательно использовать jQuery - он написан на ванильном Javascript и работает без jQuery .
Использование:
var w = $.documentWidth(),
h = $.documentHeight();
для глобального document
. Для других документов, e. г. во встроенном фрейме, к которому у вас есть доступ, передайте документ в качестве параметра:
var w = $.documentWidth( myIframe.contentDocument ),
h = $.documentHeight( myIframe.contentDocument );
Обновление: теперь и для размеров окна
С версии 1. 1. 0, JQuery. documentSize также обрабатывает размеры окна.
Это необходимо, потому что
$( window ).height()
- это ошибка в iOS , до такой степени, что она бесполезна$( window ).width()
и $( window ).height()
- ненадежные на мобильном телефоне , поскольку они не справляются с эффектами мобильного масштабирования.jQuery. documentSize предоставляет $.windowWidth()
и $.windowHeight()
, которые решают эти проблемы. Для больше, пожалуйста, проверьте документацию .
Я написал небольшой букмарклет javascript, который можно использовать для отображения размера. Вы можете легко добавить его в свой браузер и всякий раз, когда вы щелкаете по нему, вы увидите размер в правом углу окна вашего браузера.
Здесь вы найдете информацию, как использовать букмарклет https: // ru. википедия. org / wiki / Bookmarklet
javascript:(function(){!function(){var i,n,e;return n=function(){var n,e,t;return t="background-color:azure; padding:1rem; position:fixed; right: 0; z-index:9999; font-size: 1.2rem;",n=i('
'),e=function(){return'
width: '+i(window).width()+" height: "+i(window).height()+""},n.html(e()),i("body").prepend(n),i(window).resize(function(){n.html(e())})},(i=window.jQuery)?(i=window.jQuery,n()):(e=document.createElement("script"),e.src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js",e.onload=n,document.body.appendChild(e))}()}).call(this);
Оригинальный код
Оригинальный код в кофе:
(->
addWindowSize = ()->
style = 'background-color:azure; padding:1rem; position:fixed; right: 0; z-index:9999; font-size: 1.2rem;'
$windowSize = $('
') getWindowSize = -> '
width: ' + $(window).width() + ' height: ' + $(window).height() + '' $windowSize.html getWindowSize() $('body').prepend $windowSize $(window).resize -> $windowSize.html getWindowSize() return if !($ = window.jQuery) # typeof jQuery=='undefined' works too script = document.createElement('script') script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js' script.onload = addWindowSize document.body.appendChild script else $ = window.jQuery addWindowSize() )()
В основном, код предшествует небольшому div, который обновляется при изменении размера вашего окна.
В некоторых случаях, связанных с адаптивным макетом, $(document).height()
может возвращать неверные данные, которые отображают только высоту порта просмотра. Например, когда у некоторого div # wrapper есть height: 100%, этот #wrapper может быть растянут на некоторый блок внутри него. Но его высота все равно будет как высота окна просмотра. В такой ситуации вы можете использовать
$('#wrapper').get(0).scrollHeight
Это представляет фактический размер оболочки.
Я разработал библиотеку, позволяющую узнать реальный размер области просмотра для настольных компьютеров и мобильных браузеров, поскольку размеры области просмотра несовместимы на разных устройствах и не могут полагаться на все ответы этого поста (согласно всем исследованиям, которые я сделал по этому поводу): https : // GitHub. com / pyrsmk / W
Иногда вам нужно увидеть изменения ширины / высоты при изменении размера окна и внутреннего содержимого.
Для этого я написал небольшой скрипт, который добавляет окно журнала, которое динамически отслеживает все изменения размера и почти сразу же обновляет.
Добавляет действительный HTML-код с фиксированной позицией и высоким z-индексом, но он достаточно мал, так что вы можете :
Протестировано на: Chrome 40, IE11, но очень возможно работать и на других / старых браузерах. , , :)
function gebID(id){ return document.getElementById(id); }
function gebTN(tagName, parentEl){
if( typeof parentEl == "undefined" ) var parentEl = document;
return parentEl.getElementsByTagName(tagName);
}
function setStyleToTags(parentEl, tagName, styleString){
var tags = gebTN(tagName, parentEl);
for( var i = 0; i
screen
РЕДАКТИРОВАТЬ: Теперь стили применяются только к элементу таблицы регистратора - не ко всем таблицам - также это решение 3894676001 без jQuery :)
// innerWidth
const screen_viewport_inner = () => {
let w = window,
i = `inner`;
if (!(`innerWidth` in window)) {
i = `client`;
w = document.documentElement || document.body;
}
return {
width: w[`${i}Width`],
height: w[`${i}Height`]
}
};
// outerWidth
const screen_viewport_outer = () => {
let w = window,
o = `outer`;
if (!(`outerWidth` in window)) {
o = `client`;
w = document.documentElement || document.body;
}
return {
width: w[`${o}Width`],
height: w[`${o}Height`]
}
};
// style
const console_color = `
color: rgba(0,255,0,0.7);
font-size: 1.5rem;
border: 1px solid red;
`;
// testing
const test = () => {
let i_obj = screen_viewport_inner();
console.log(`%c screen_viewport_inner = \n`, console_color, JSON.stringify(i_obj, null, 4));
let o_obj = screen_viewport_outer();
console.log(`%c screen_viewport_outer = \n`, console_color, JSON.stringify(o_obj, null, 4));
};
// IIFE
(() => {
test();
})();
Теперь мы можем безопасно использовать только собственное окно javascript api во всех браузерах , без контекста окна.
Синтаксис довольно понятен!
n = "px
" /* separator */
dp = devicePixelRatio /* device zoom level */
body = (() => { document.body.innerHTML = /* ready! */
"Device zoom level: " + dp
+n+ "Screen width: " + screen.width
*dp+n+ "Screen height: "+ screen.height
*dp+n+ "Document frame height: " + innerHeight
*dp+n+ "Document frame width: " + innerWidth *dp+n+ "Parent document height: "+ outerHeight *dp+n+ "Parent document width: "+ outerWidth *dp+n+ "Window available height: "+ screen.availHeight *dp+n+ "Window available width: "+ screen.availWidth *dp+n+ "Document frame max scrollable X: "+ scrollMaxX *dp+n+ "Document frame max scrollable Y: "+ scrollMaxY
*dp+n+ "Distance from left screen to window: "+ screenX
*dp+n+ "Distance from top screen to window: "+ screenY
*dp+n
})()
Чтобы получить точные результаты во всех браузерах и устройствах, результаты должны быть умножены на devicePixelRatio .
Свойство Window devicePixelRatio возвращает соотношение разрешение в физических пикселях до разрешения в пикселях CSS для текущее устройство отображения. Это значение также может быть интерпретировано как соотношение размеров пикселей: размер одного CSS-пикселя к размеру одного физический пиксель. Проще говоря, это говорит браузеру, сколько фактические пиксели экрана должны использоваться для рисования одного пикселя CSS.
Это полезно при работе с разницей между рендерингом на стандартный дисплей по сравнению с дисплеем HiDPI или Retina, который использует больше пиксели экрана для рисования одинаковых объектов, в результате чего изображение становится более четким.
Нет способа получить уведомление при изменении этого значения (что может произойдет, например, если пользователь перетаскивает окно на дисплей с разная плотность пикселей). Поскольку нет никаких обратных вызовов или событий доступны для обнаружения изменения плотности пикселей, единственный способ сделать это периодически проверяйте значение devicePixelRatio, чтобы увидеть, изменилось. Просто не делайте это слишком часто, иначе вы окажете влияние на производительность.
https: // разработчик. Mozilla. org / en-US / docs / Web / API / Window / devicePixelRatio
Вот мое решение. Сначала идет какой-то служебный объект для работы с cookie
/* Simple getter and setter for cookies */
(function(global){
function setCookie(cname, cvalue, exdays) {
exdays = typeof exdays === 'undefined' && 365;
var d = new Date();
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
var expires = "expires="+d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return undefined;
}
global.Cookie = {
get: getCookie,
set: setCookie
};
})(window);
Тогда вы можете сделать что-то вроде. ,
/*
Detect screen width and height and save it to a cookie.
We are later using it to resize the images accordingly.
*/
if(
!Cookie.get('screen_width') ||
!Cookie.get('screen_height') ||
Cookie.get('screen_width') != screen.width ||
Cookie.get('screen_height') != screen.height
){
Cookie.set('screen_width', screen.width);
Cookie.set('screen_height', screen.height);
location.reload();
}
Таким образом, вы можете использовать язык на стороне сервера для чтения файлов cookie и получения точного размера изображения на экране пользователя.