its*_*sme 21 javascript css jquery media-queries twitter-bootstrap
当bootstrap-responsive.css媒体查询付诸实施时,这是最快速,最简单的方法吗?
go in action =当您将窗口调整为移动宽度并将网站更改为响应式移动时
希望问题很清楚
fal*_*lla 27
我想出了一种使用窗口调整大小事件的方法,但是依赖于Twitter Bootstrap的媒体查询而没有对其断点进行硬编码:
<span id="mq-detector">
<span class="visible-xs"></span>
<span class="visible-sm"></span>
<span class="visible-md"></span>
<span class="visible-lg"></span>
</span>
Run Code Online (Sandbox Code Playgroud)
#mq-detector {
visibility: hidden;
}
Run Code Online (Sandbox Code Playgroud)
var currMqIdx = undefined;
var mqDetector = $("#mq-detector");
var mqSelectors = [
mqDetector.find(".visible-xs"),
mqDetector.find(".visible-sm"),
mqDetector.find(".visible-md"),
mqDetector.find(".visible-lg")
];
var checkForResize = function() {
for (var i = 0; i <= mqSelectors.length; i++) {
if (mqSelectors[i].is(":visible")) {
if (currMqIdx != i) {
currMqIdx = i;
console.log(mqSelectors[i].attr("class"));
}
break;
}
}
};
$(window).on('resize', checkForResize);
checkForResize();
Run Code Online (Sandbox Code Playgroud)
Sti*_*ley 14
其他答案的一个问题是每次调整大小时都会触发更改事件.如果你的javascript做了重要的事情,这可能会非常昂贵.
当超过阈值时,下面的代码仅调用您的更新功能一次.
要进行测试,请抓住窗口大小句柄,然后快速拖动调整大小以查看浏览器是否会阻塞.
<script>
// Global state variable
var winSize = '';
window.onresize = function () {
var newWinSize = 'xs'; // default value, check for actual size
if ($(this).width() >= 1200) {
newWinSize = 'lg';
} else if ($(this).width() >= 992) {
newWinSize = 'md';
} else if ($(this).width() >= 768) {
newWinSize = 'sm';
}
if( newWinSize != winSize ) {
doSomethingOnSizeChange();
winSize = newWinSize;
}
};
</script>
Run Code Online (Sandbox Code Playgroud)
sof*_*var 13
使用jquery,你可以找到当前窗口的大小,然后相应地做你的东西.
$(window).resize(function() {
if ($(this).width() >= 1280) {
//do something
}
else if ($(this).width() < 1280 && $(this).width()>= 980) {
//do something
}
...
});
Run Code Online (Sandbox Code Playgroud)
CSS: : Twitter的Bootsrap的布局
/* Large desktop */
@media (min-width: 1200px) { ... }
/* Portrait tablet to landscape and desktop */
@media (min-width: 768px) and (max-width: 979px) { ... }
/* Landscape phone to portrait tablet */
@media (max-width: 767px) { ... }
/* Landscape phones and down */
@media (max-width: 480px) { ... }
Run Code Online (Sandbox Code Playgroud)
Bjø*_*ldt 10
这对我来说与Bootstrap 3结合使用:
<div id="media-width-detection-element"></div>
<style type="text/css">
#media-width-detection-element {
display: none;
width: 0px;
}
@media (min-width: 768px) {
#media-width-detection-element {
width: 768px;
}
}
@media (min-width: 992px) {
#media-width-detection-element {
width: 992px;
}
}
@media (min-width: 1200px) {
#media-width-detection-element {
width: 1200px;
}
}
</style>
<script type="text/javascript">
//<![CDATA[
function xs() {
return $("#media-width-detection-element").css("width") === "0px";
}
function sm() {
return $("#media-width-detection-element").css("width") === "768px";
}
function md() {
return $("#media-width-detection-element").css("width") === "992px";
}
function lg() {
return $("#media-width-detection-element").css("width") === "1200px";
}
//]]>
</script>
Run Code Online (Sandbox Code Playgroud)
隐藏的DIV更改宽度取决于使用的实际CSS最小宽度设置.然后我的javascript简单检查DIV的当前.
对于那些喜欢这种不影响其实际标记的人,下面的工作如下:
$(function(){
...
var mqClasses = ["visible-xs", "visible-sm", "visible-md", "visible-lg"];
var mq = $("<span id='mqDetector' style='visibility:hidden'></span>").appendTo($("body"));
$.each(mqClasses, function(idx, val) {
mq.append("<span class='" + val + "'></span>");
});
function checkMQ() {
var visible = mq.find(":visible").get(0).className;
return visible.slice(-2);
};
function checkResize(){
switch(checkMQ){
case 'xs' : ...; break;
case 'sm' : ...; break;
...
}
}
$(window).on('resize', checkResize);
checkResize(); //do it once when page loads.
Run Code Online (Sandbox Code Playgroud)