Mar*_*ark 9 html jquery external media-queries
我正在尝试这个,但它不起作用:
<html>
<head>
<script src="js/menu-collapser.js" type="text/javascript" media="media screen and (max-width: 599px)"></script>
</head>
...
</html>
Run Code Online (Sandbox Code Playgroud)
//menu-collapser.js:
jQuery(document).ready(function($){
$('.main-navigation li ul').hide();
$('.main-navigation li').has('ul').click(function() {
$(this).children().toggle();
});
});
Run Code Online (Sandbox Code Playgroud)
您是否知道如何以正确的方式做到这一点?如果标题中直接使用该标题,则该脚本可以正常工作.
nic*_*har 17
你不能直接使用Javascript <script>标签.媒体查询用于链接的CSS文件或内联CSS样式.一个基本的例子:
<link rel="stylesheet" media="screen and (min-width: 900px)" href="desktop.css"/>
<link rel="stylesheet" media="screen and (min-width: 571px)" href="tablet.css"/>
<link rel="stylesheet" media="screen and (max-width: 570px)" href="mobile.css"/>
Run Code Online (Sandbox Code Playgroud)
或直接在您的样式表中:
@media screen and (max-width: 599px) {
#mobile {
display: block;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,您可以使用外部资源加载器/媒体查询库来执行此操作(require.js,modernizr.js,enquire.js等),在这种情况下,我正在使用enquire.js设置示例,我认为它非常有效,默认情况下不需要jQuery:
1)包括enquire.js(可在此处获得):
<script type="text/javascript" src="/js/enquire.js"></script>
Run Code Online (Sandbox Code Playgroud)
2)创建一个加载函数 - 加载JS文件:
<script type="text/javascript">
// This loads JS files in the head element
function loadJS(url)
{
// adding the script tag to the head
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
// fire the loading
head.appendChild(script);
}
</script>
Run Code Online (Sandbox Code Playgroud)
3)Fire enquire.js并监听媒体查询更改(包括on-load和on-resize):
<script type="text/javascript">
enquire.register("screen and (max-width: 599px)", {
match : function() {
// Load a mobile JS file
loadJS('mobile.js');
}
}).listen();
enquire.register("screen and (min-width: 600px) and (max-width: 899px)", {
match : function() {
// Load a tablet JS file
loadJS('tablet.js');
//console.log('tablet loaded');
}
}).listen();
enquire.register("screen and (min-width: 900px)", {
match : function() {
// Load a desktop JS file
loadJS('desktop.js');
//console.log('desktop loaded');
}
}).listen();
</script>
Run Code Online (Sandbox Code Playgroud)
使用从外部文件加载的enquire.js的简单HTML页面:
<html>
<head>
<script type="text/javascript" src="/enquire.js"></script>
<script type="text/javascript">
// This loads JS files in the head element
function loadJS(url)
{
// adding the script tag to the head
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
// fire the loading
head.appendChild(script);
}
</script>
<style>
body {
font-family: arial;
}
h1 {
font-size: 50pt;
}
#mobile {
display: none;
}
#tablet {
display: none;
}
#desktop {
display: none;
}
@media screen and (max-width: 599px) {
#mobile {
display: block;
}
}
@media screen and (min-width: 600px) and (max-width: 899px) {
#tablet {
display: block;
}
}
@media screen and (min-width: 900px) {
#desktop {
display: block;
}
}
</style>
</head>
<body>
<div id="desktop">
<h1>Desktop</h1>
</div>
<div id="tablet">
<h1>Tablet</h1>
</div>
<div id="mobile">
<h1>Mobile</h1>
</div>
<script type="text/javascript">
enquire.register("screen and (max-width: 599px)", {
match : function() {
// Load a JS file
loadJS('mobile.js');
}
}).listen();
enquire.register("screen and (min-width: 600px) and (max-width: 899px)", {
match : function() {
loadJS('tablet.js');
//console.log('tablet loaded');
}
}).listen();
enquire.register("screen and (min-width: 900px)", {
match : function() {
loadJS('desktop.js');
//console.log('desktop loaded');
}
}).listen();
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
除了加载JS文件之外,您还可以创建一个CSS加载器,它可以以相同的方式(有条件地)工作,但是会破坏@media在CSS 中使用的对象.值得阅读enquire.js的用法解释,因为它可以做的比我在这里说明的要多得多.
警告:上面没有使用jQuery,但你可以利用它提供的一些功能; 例如加载脚本 - 或执行您需要的其他功能.
为什么不只是有条件地加载脚本呢?
(function() {
if( window.innerWidth > 600 ) {
var theScript = document.createElement('script');
theScript.type = 'text/javascript';
theScript.src = 'js/menu-collapser.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(theScript, s);
}
})();
Run Code Online (Sandbox Code Playgroud)
或者更好的是,仅在 window.innerWidth > 600 时才执行代码?无论如何,有很多解决方案可供您使用。
| 归档时间: |
|
| 查看次数: |
19502 次 |
| 最近记录: |