javascript - 如何根据屏幕宽度动态设置道具?
问题描述
我有下面的代码,其中我有一个组件是幻灯片的轮播(来自库 nuka-carousel)。当屏幕宽度低于某个级别(729px)时,我希望属性 slideWidth={0.5} 为 slideWidth={1} 以便当屏幕变小时,而不是一次看到多张幻灯片,你只能见一。
我尝试过使用媒体查询,但我找不到根据样式设置属性的方法。
import React from 'react'
import Carousel from 'nuka-carousel'
class Quotes extends React.Component {
state = {
slideIndex: 0,
};
render() {
return (
<Carousel slideWidth={0.5}>
{this.props.slides.map(slide => (
<Slide>
.... Content ....
</Slide>
))}
</Carousel>
)
}
};
以前有没有人遇到过这个问题或可以想到解决方案?
谢谢!
解决方案
您可以使用matchMedia API,它类似于 JS 的媒体查询 - 您可以设置一个断点并更改 JS 变量,这将允许您有条件地呈现您想要的轮播:
var mediaQueryList = window.matchMedia('(min-width: 729px)');
return (
{ mediaQueryList.matches && //matches
<Carousel slideWidth={0.5}>
{this.props.slides.map(slide => (
<Slide>
.... Content ....
</Slide>
))}
</Carousel>
}
{ !mediaQueryList.matches && //doesn't match
<Carousel slideWidth={1}>
{this.props.slides.map(slide => (
<Slide>
.... Content ....
</Slide>
))}
</Carousel>
}
)
所以这里的想法是,当 MQ 匹配时,我们渲染 0.5 轮播,当它不匹配时,我们渲染 1 轮播。如果需要,您还可以设置回调并控制变量的值:
function handleWidthChange(evt) {
if (evt.matches) {
/* The viewport is currently wide */
myVariable = 0.5;
} else {
/* The viewport is currently narrow */
myVariable = 1;
}
}
mediaQueryList.addListener(handleWidthChange); // Add the callback function as a listener to the query list.
handleWidthChange(mediaQueryList);//call it
return (
<Carousel slideWidth={ myVariable }>
{this.props.slides.map(slide => (
<Slide>
.... Content ....
</Slide>
))}
</Carousel>
)
推荐阅读
- java - 如何更改不同鼠标运动事件的文本颜色?
- excel - 如何获取对 TextBox 本身的引用,而不是 Excel vba 中的默认值?
- ssis - SSIS - 如何在“”中插入所有值
- java - Jetty HttpClient 代理身份验证配置 (NTLM)
- amazon-web-services - 使用多维数组调用 AWS 中的端点
- android - 如何兼容Android10.0 Wi Fi连接“addnetwork”方法返回-1?
- flutter - 颤动中的单选按钮活动颜色不起作用
- python - 在python中,我可以在两个文件夹(名称)之间使用特殊字符匹配文件名的一部分,然后将找到的匹配复制到第二个文件夹中吗?
- flutter - Flutter Permission Denial:打开提供程序 org.chromium.chrome.browser.util.ChromeFileProvider
- java - 升级到 macOS Big Sur 后无法启动 Neo4j 控制台应用程序