我想要 1 个 480 像素的小屏幕图像,然后 2 个 580 像素的图像,然后 3 个 768 像素的图像,然后 4 个 980 像素的图像

Posted

技术标签:

【中文标题】我想要 1 个 480 像素的小屏幕图像,然后 2 个 580 像素的图像,然后 3 个 768 像素的图像,然后 4 个 980 像素的图像【英文标题】:i want 1 image in small screen in 480px then 2 image 580px then 3 image 768px then 4 image 980px 【发布时间】:2022-01-17 19:38:01 【问题描述】:

我想定义 4 个屏幕尺寸和 4 个变量值。我正在尝试如下。

if ($(window).width() > 789) 
  var cyx = 1;

if ($(window).width() < 780) 
  cyx = 2;

if ($(window).width() < 580) 
  cyx = 3;

if ($(window).width() < 480) 
  cyx = 4;

是否可以在 javascript 中以更短的方式执行此操作?

谢谢。

【问题讨论】:

我看不懂你的代码?这根本没有意义。 我在下面有这个代码....但是我想缩短这个 if ($(window).width() > 789) var cyx = 1; if ($(window).width() 为了将来参考,请始终将有效的逻辑放在问题中。在这种情况下,我已经为您编辑了它。另外,你为什么需要这样做? UI 和 JS 应该是两个完全独立的实体。如果您必须根据屏幕大小修改 JS 代码,则表明某些事情没有正确完成。 你可以“codegolf”任何东西,当你说“更短”时,你只是在寻找建议的改进吗?你现在拥有的不是特别长(对于一段未缩小且易于理解的代码) cyx 应该为$(window).width() === 780 包含什么值? 【参考方案1】:
var width = $(window).width();
var cyx;

if (width > 781) 
  cyx = 4;
 else if (width > 780) 
  cyx = 3;
 else if (width > 580) 
  cyx = 2;
 else if (width > 480) 
  cyx = 1;

这就是我会做这种逻辑的方式。您可以使用三元组“缩短”它,但它看起来很混乱。

【讨论】:

acctualy 我在下面有这段代码与 react js 一起使用,但上面的代码在下面不起作用是我的代码 if ($(window).width() > 789) var cyx2 = 1; if ($(window).width() @UISMART 为什么要在 React.js 中使用 jQuery 作为窗口宽度?你可以避免使用 jQuery,只使用 React.js:betterprogramming.pub/…【参考方案2】:

我过去做过的另一种方法是在页面上包含一个高度为 0 的 div。我给它一个像#breakpoint 这样的ID。然后我在 CSS 样式表中为它设置了一个 z-index。例如:

#breakpoint  height:0; z-index:10; 
@media only screen and (min-width: 768px) 
    #breakpoint  z-index:5; 

@media only screen and (min-width: 1200px) 
    #breakpoint  z-index:1; 

然后,您只需测量 z-index 值。

var bp = parseInt($("#breakpoint").css('z-index'));
switch(bp)
    case 10:
        console.log("Is mobile");
        break;
    case 5:
        console.log("Is tablet");
        break;
    case 1:
        console.log("Is desktop");
        break;

这减少了窗口宽度的测量,您可以在 CSS 代码中调整断点,而不是在 JavaScript 代码中定义宽度。

【讨论】:

【参考方案3】:

你可以使用一些数学:

const cyx = [780, 580, 480].filter(el => el > $(window).width()).length + 1;

这不是问题中的代码所做的,但这是我假设你真正想要的。

例子:

console.log([780, 580, 480].filter(el => el > 800).length + 1);
console.log([780, 580, 480].filter(el => el > 700).length + 1);
console.log([780, 580, 480].filter(el => el > 500).length + 1);
console.log([780, 580, 480].filter(el => el > 400).length + 1);

【讨论】:

感谢您的帮助,是的,但它以相反的方式工作.....我无法控制它。它在大屏幕小屏幕 2、3、4 中显示 1 个图像,但我希望它在大屏幕上显示 4 个图像,然后是 3、2、1 @UISMART 您问题中的代码为$(window).width() === 400 分配4,为$(window).width() === 800 分配1,与我的答案中的代码完全相同。如果你问错了问题,你应该先修正问题,然后我才能修正我的答案。 我想要 1 张 480px 的小屏幕图片,然后 2 张 580px 的图片,然后 3 张 768px 的图片,然后 4 张 980px 的图片,然后 5 张 1280px 的图片 .......这样请帮忙,谢谢 @UISMART 你能先解决你的问题吗?列表 480px、580px、768px、980px、1280px 是从哪里来的?您的问题还有其他价值。 在您的代码中我不需要该列表。这是一个非常好的代码。但它根据我的需要以相反的方式工作。所以请帮助我用单行代码来扭转我之前描述的这些

以上是关于我想要 1 个 480 像素的小屏幕图像,然后 2 个 580 像素的图像,然后 3 个 768 像素的图像,然后 4 个 980 像素的图像的主要内容,如果未能解决你的问题,请参考以下文章

Andengine,缩放图像以填充屏幕大小,而不保持纵横比

前端关于移动端屏幕适配

android应用开发之View的大小计量单位(pxdpidpdipsp)

Android DPI相关知识

Android 屏幕适配

主屏参数 480×800像素(WVGA) 1280×720像素(720P) 那个好