通过javascript检测媒体查询并应用适当的数据状态
Detecting media queries via javascript and apply appropriate data-state
我需要javascript#帮助。
我有一个具有三种不同数据状态(A、B和C)的对象(#objID)(https://www.dropbox.com/s/zn19k87eu2hp8ow/data-states.jpg?dl=0)。。。每个状态都包含一些css来描述它的外观。
我想使用javascript来检测媒体查询的更改,并将适当的数据状态添加到#objID中。
(即。如果屏幕低于320px,则将[data state="A"]添加到#objID
或者,如果屏幕在320px和728px之间,则切换到[数据状态="B"]
或者如果屏幕高于1024px,则切换到[数据状态="C"]
)类似于这个概念。。http://zerosixthree.se/detecting-media-queries-with-javascript/
但我不知道如何实现它。请帮忙。感谢
为了简化,您可以执行以下操作:
window.matchMedia("(max-width: 320px)").addListener(function() {
// Change the value of `data-state`
});
window.matchMedia("(min-width: 321px) and (max-width: 728px)").addListener(function() {
// Change the value of `data-state`
});
但是,您需要确保浏览器支持window.matchMedia
,并处理维护状态等,以了解何时从一个断点进入另一个断点,并确定哪个是活动的,因为当您退出和输入断点时,两者都会触发。
至于在window.onresize
上做这件事,这不是一种很好的表现方式,如果你这样做,你必须节流/减压。使用matchMedia只会在断点更改时触发,而不是在调整大小时连续触发。它还为您提供了保持CSS媒体断点与JS同步的好处。
这是一个Polyfill,适用于不支持如上所述的Polyfill的浏览器,本指南也可能对您有所帮助。
但是:
我有一个对象(#objID),它有三种不同的数据状态(A、B和C)。每个状态都包含一些css来描述它的外观。
听起来好像您想更改基于data-state
属性应用于元素的CSS样式,您将在每个断点更改这些样式?
如果我错了,请纠正我,但为什么你不能直接使用媒体查询来更改应用于它的CSS呢?
@media only screen and (max-width: 320px) {
/* State A */
.css-selector {
color: red;
}
}
@media only screen and (min-width: 321px) and (max-width: 728px) {
/* State B */
.css-selector {
color: green;
}
}
@media only screen and (min-width: 728px) {
/* State C */
.css-selector {
color: blue;
}
}
您需要onresize
事件
window.onresize = function(event) {
//...
};
屏幕有两个维度,width
和height
,您描述了一个一维的比较,它没有给我们足够的信息来了解您想要实现的目标。无论如何,您可以在onresize
事件中使用window.innerWidth
和window.innerHeight
。
- 如何在具有某些 UI 视图的状态中管理工厂单个请求数据
- 来自应用程序状态的Jquery数据表源
- 基于javascript中的状态字段对动态行数据进行动态着色
- 美国地图插件,具有状态数据/悬停功能的新按钮
- 如何在状态输入ui路由器时立即显示模板,然后当承诺被解决时显示数据
- 无限滚动,动态数据按上次修改状态排序
- 如何将状态对象/数据传递给(异步)ajax 回调
- 当我想对redux容器中的数据进行排序或过滤时,我该如何查看它的状态
- 将状态的 URL 数据获取到模板中
- 使选项卡处于活动/非活动状态未显示正确的数据
- 如何使用Angular UI Router解析所有状态的数据
- 谷歌图表LineGraph切换数据表和维护状态
- 如何处理需要子组件状态的Meteor数据
- 如何在类似Om的不可变应用程序状态下对关系数据进行建模
- Javascript:在表单中输入数据时,提交按钮不处于活动状态
- 反应.js - 处于异步数据状态的深层对象不起作用
- 有两个html页面.当我从下一页恢复到第一页时,我希望保存第一页的数据状态
- 如何选择要在jquery函数中使用的数据状态
- 选择下一个列表组并更改数据状态
- 通过javascript检测媒体查询并应用适当的数据状态