JavaScript 使用视口计算 width/height
JavaScript calculate with viewport width/height
我正在尝试在我的移动 Webview 中设置一个响应点并这样做了:
var w = window.innerWidth-40;
var h = window.innerHeight-100;
目前效果很好。但是值-40 和-100 不在视口缩放高度和宽度中。
当我这样做时:
var w = window.innerWidth-40vw;
var h = window.innerHeight-100vh;
因为它应该保持响应并相对于视口 - JS 不再工作。
我认为 vh 和 vw 仅适用于 CSS ?
我怎样才能在 JS 中实现这个?
请不要 JQuery 解决方案 - 只有 JS!
谢谢
问题是JS没有40vh
,先计算40vh
多少像素再用吧。执行 1000 - 40vh
时会抛出错误
40vh
表示 40 % of viewport height
。所以window.innerHeight * 0.4 == 40vh
也没有wh
这样的东西,只有vh
(视口高度的百分比)
基于this site,您可以在javascript
中编写以下函数来计算您想要的值:
function vh(v) {
var h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
return (v * h) / 100;
}
function vw(v) {
var w = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
return (v * w) / 100;
}
function vmin(v) {
return Math.min(vh(v), vw(v));
}
function vmax(v) {
return Math.max(vh(v), vw(v));
}
console.info(vh(20), Math.max(document.documentElement.clientHeight, window.innerHeight || 0));
console.info(vw(30), Math.max(document.documentElement.clientWidth, window.innerWidth || 0));
console.info(vmin(20));
console.info(vmax(20));
我在我的代码中使用了 this 令人难以置信的问题!
试试这个:
function getViewport() {
var viewPortWidth;
var viewPortHeight;
// the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight
if (typeof window.innerWidth != 'undefined') {
viewPortWidth = window.innerWidth,
viewPortHeight = window.innerHeight
}
// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
else if (typeof document.documentElement != 'undefined'
&& typeof document.documentElement.clientWidth !=
'undefined' && document.documentElement.clientWidth != 0) {
viewPortWidth = document.documentElement.clientWidth,
viewPortHeight = document.documentElement.clientHeight
}
// older versions of IE
else {
viewPortWidth = document.getElementsByTagName('body')[0].clientWidth,
viewPortHeight = document.getElementsByTagName('body')[0].clientHeight
}
return [viewPortWidth, viewPortHeight];
}
参考:http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/
如果您可以完全编辑页面,最简单的方法是制作一个具有 -40vw 和 -100vh 的 css class,如下所示:
CSS:
.class{
width: -40vw;
height: -100vh;
}
JS:
element.classList.add("class");
注意:"classList" 在 Internet Explorer 9 中不受支持。如果您希望它在所有浏览器中工作,请将其用于 JS:
function myFunction() {
var element, name, arr;
element = document.getElementById("myDIV");
name = "mystyle";
arr = element.className.split(" ");
if (arr.indexOf(name) == -1) {
element.className += " " + name;
}
}
我认为你只需要用引号将它括起来。
var w = window.innerWidth = "40vw"
var w = window.innerWidth = "40vw"
这是我的解决方案,你可以使用 CSS;
// calc dynamic customer device height/width
let vh = window.innerHeight * 0.01,
vw = window.innerWidth * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
document.documentElement.style.setProperty('--vw', `${vw}px`);
如何在CSS中使用?
如果您要使用100vh或100vw,您应该为不兼容的浏览器设置100vh/100vw。
示例;
.wrapper{
height: 100vh; /* Fallback for browsers that do not support Custom Properties */
height: calc(var(--vh, 1vh) * 100);
}
.slide-container{
height: calc(var(--vh, 1vh) * 100 - var(--menuHeight) - var(--footerHeight));
}
.little-image{
width: calc(var(--vw, 1vw) * 5);
margin-bottom: calc(var(--vh, 1vh) * 1);
}
/* and more.. */
这不是通用解决方案,但如果您使用的页面始终 100% 显示在视口中(即,如果 body 没有滚动并始终匹配 window 宽度和高度)。
let vh = document.body.getBoundingClientRect().height;
这仅用一行代码就可以将 vh 变量设置为文档的像素值 body。
对于游戏开发和其他将 body 附加到视口的场景很有用。
我正在尝试在我的移动 Webview 中设置一个响应点并这样做了:
var w = window.innerWidth-40;
var h = window.innerHeight-100;
目前效果很好。但是值-40 和-100 不在视口缩放高度和宽度中。
当我这样做时:
var w = window.innerWidth-40vw;
var h = window.innerHeight-100vh;
因为它应该保持响应并相对于视口 - JS 不再工作。 我认为 vh 和 vw 仅适用于 CSS ? 我怎样才能在 JS 中实现这个?
请不要 JQuery 解决方案 - 只有 JS!
谢谢
问题是JS没有40vh
,先计算40vh
多少像素再用吧。执行 1000 - 40vh
40vh
表示 40 % of viewport height
。所以window.innerHeight * 0.4 == 40vh
也没有wh
这样的东西,只有vh
(视口高度的百分比)
基于this site,您可以在javascript
中编写以下函数来计算您想要的值:
function vh(v) {
var h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
return (v * h) / 100;
}
function vw(v) {
var w = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
return (v * w) / 100;
}
function vmin(v) {
return Math.min(vh(v), vw(v));
}
function vmax(v) {
return Math.max(vh(v), vw(v));
}
console.info(vh(20), Math.max(document.documentElement.clientHeight, window.innerHeight || 0));
console.info(vw(30), Math.max(document.documentElement.clientWidth, window.innerWidth || 0));
console.info(vmin(20));
console.info(vmax(20));
我在我的代码中使用了 this 令人难以置信的问题!
试试这个:
function getViewport() {
var viewPortWidth;
var viewPortHeight;
// the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight
if (typeof window.innerWidth != 'undefined') {
viewPortWidth = window.innerWidth,
viewPortHeight = window.innerHeight
}
// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
else if (typeof document.documentElement != 'undefined'
&& typeof document.documentElement.clientWidth !=
'undefined' && document.documentElement.clientWidth != 0) {
viewPortWidth = document.documentElement.clientWidth,
viewPortHeight = document.documentElement.clientHeight
}
// older versions of IE
else {
viewPortWidth = document.getElementsByTagName('body')[0].clientWidth,
viewPortHeight = document.getElementsByTagName('body')[0].clientHeight
}
return [viewPortWidth, viewPortHeight];
}
参考:http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/
如果您可以完全编辑页面,最简单的方法是制作一个具有 -40vw 和 -100vh 的 css class,如下所示:
CSS:
.class{
width: -40vw;
height: -100vh;
}
JS:
element.classList.add("class");
注意:"classList" 在 Internet Explorer 9 中不受支持。如果您希望它在所有浏览器中工作,请将其用于 JS:
function myFunction() {
var element, name, arr;
element = document.getElementById("myDIV");
name = "mystyle";
arr = element.className.split(" ");
if (arr.indexOf(name) == -1) {
element.className += " " + name;
}
}
我认为你只需要用引号将它括起来。
var w = window.innerWidth = "40vw"
var w = window.innerWidth = "40vw"
这是我的解决方案,你可以使用 CSS;
// calc dynamic customer device height/width
let vh = window.innerHeight * 0.01,
vw = window.innerWidth * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
document.documentElement.style.setProperty('--vw', `${vw}px`);
如何在CSS中使用?
如果您要使用100vh或100vw,您应该为不兼容的浏览器设置100vh/100vw。
示例;
.wrapper{
height: 100vh; /* Fallback for browsers that do not support Custom Properties */
height: calc(var(--vh, 1vh) * 100);
}
.slide-container{
height: calc(var(--vh, 1vh) * 100 - var(--menuHeight) - var(--footerHeight));
}
.little-image{
width: calc(var(--vw, 1vw) * 5);
margin-bottom: calc(var(--vh, 1vh) * 1);
}
/* and more.. */
这不是通用解决方案,但如果您使用的页面始终 100% 显示在视口中(即,如果 body 没有滚动并始终匹配 window 宽度和高度)。
let vh = document.body.getBoundingClientRect().height;
这仅用一行代码就可以将 vh 变量设置为文档的像素值 body。
对于游戏开发和其他将 body 附加到视口的场景很有用。