响应式javascript

响应式javascript,javascript,jquery,responsive-design,Javascript,Jquery,Responsive Design,任何人都可以用一个狡猾的if语句来帮助我吗?尽管我可能会尝试,但我看不出它有任何错误,代码在if语句之外工作: var sizeBefore; var sizeAfterResize; var sizeBreakPoint; var resizeTimer; $(function() { sizeBefore = $(window).width(); sizeBreakPoint = 500; doneResizing(); }); function d

任何人都可以用一个狡猾的if语句来帮助我吗?尽管我可能会尝试,但我看不出它有任何错误,代码在if语句之外工作:

var sizeBefore;
var sizeAfterResize;
var sizeBreakPoint;
var resizeTimer; 
$(function() {
    sizeBefore = $(window).width();
    sizeBreakPoint = 500;
    doneResizing();       
});

function doneResizing(){
       sizeAfterResize = $(window).width();
       if ((sizeBefore < sizeBreakPoint) && (sizeAfterResize >= sizeBreakPoint)) {
                alert('Before:' + sizeBefore);
                alert('After:' + sizeAfterResize);
                sizeBefore = sizeAfterResize;
                // THIS RUNS WHEN OUTSIDE IF STATEMENT
       }
}


$(window).resize(function() {
    //doneResizing();
     clearTimeout(resizeTimer);
     resizeTimer = setTimeout(doneResizing, 100);
});  

我认为你的问题在于if条件。
sizeBefore
是文档就绪事件中屏幕宽度的大小,如果您使用全屏浏览器,则屏幕宽度将大于500(这是您的断点值)。但是您永远不会更新
sizeBefore
,因此它永远不会低于
sizeBreakPoint
,因此,if语句的这一部分永远不会为真:
(sizeBefore
我认为您的问题在于if条件。
sizeBefore
是文档就绪事件中屏幕宽度的大小,如果您使用全屏浏览器,则屏幕宽度将大于500(这是您的断点值)。但是您永远不会更新
sizeBefore
,因此它永远不会低于
sizeBreakPoint
,因此,if语句的这一部分永远不会为真:
(sizeBefore
查看并测试您的if,我可以说:

if ((sizeBefore < sizeBreakPoint) && (sizeAfterResize >= sizeBreakPoint)) 
if((sizeBefore=sizeBreakPoint))
只有当窗口开始时小于500,调整大小后大于500时,这才是正确的。这是因为在页面加载时,您从不在其他页面之前更改大小

你能告诉我你真正想核实什么吗?或者如果这是你真正想要的

**编辑:建议的解决方案**

尝试这样做:

$(function() {
   sizeBreakPointMin = 480;
   sizeBreakPointMax = 520;
   doneResizing();       
});

function doneResizing(){
   sizeAfterResize = $(window).width();
   //this way you have a window where this is false and it's as you want to allow the window as in a fine size
   //you can garantie that the window is always bigger then 480 and smaller then 520
   if ((sizeAfterResize < sizeBreakPointMin) || (sizeAfterResize >= sizeBreakPointMax)) {
            alert('Before:' + sizeBefore);
            alert('After:' + sizeAfterResize);
            // THIS RUNS WHEN OUTSIDE IF STATEMENT
   }
}
$(函数(){
sizeBreakPointMin=480;
sizeBreakPointMax=520;
doneResizing();
});
函数doneResizing(){
sizeAfterResize=$(窗口).width();
//这样,您就有了一个窗口,其中这是错误的,这是因为您希望允许该窗口具有良好的大小
//你可以说窗口总是比480大,比520小
如果((sizeAfterResize=sizeBreakPointMax)){
警报('Before:'+sizeBefore);
警报('After:'+sizeAfterResize);
//当在IF语句外部时,将运行此命令
}
}
从您的代码:

 if ((sizeBefore < sizeBreakPoint) && (sizeAfterResize >= sizeBreakPoint)) {
            ...
            sizeBefore = sizeAfterResize;
 }
if((sizeBefore=sizeBreakPoint)){
...
sizeBefore=sizeAfterResize;
}
这两行不能很好地结合在一起,因为第一次这是真的,你只是说,
sizeAfterResize>=sizeBreakPoint
下一次你去检查if
sizeBefore
时,它总是比
sizeBreakPoint
更大,使得if语句无法按原样输入两次(如果您不在if之外更改
sizeBefore


希望这有帮助。

如果我可以说:

if ((sizeBefore < sizeBreakPoint) && (sizeAfterResize >= sizeBreakPoint)) 
if((sizeBefore=sizeBreakPoint))
只有当你的窗口开始时小于500,当你调整大小后超过500,这才是正确的。这是因为你从来不会在页面加载之前改变你的大小

你能告诉我你真正想核实什么吗?或者如果这是你真正想要的

**编辑:建议的解决方案**

尝试这样做:

$(function() {
   sizeBreakPointMin = 480;
   sizeBreakPointMax = 520;
   doneResizing();       
});

function doneResizing(){
   sizeAfterResize = $(window).width();
   //this way you have a window where this is false and it's as you want to allow the window as in a fine size
   //you can garantie that the window is always bigger then 480 and smaller then 520
   if ((sizeAfterResize < sizeBreakPointMin) || (sizeAfterResize >= sizeBreakPointMax)) {
            alert('Before:' + sizeBefore);
            alert('After:' + sizeAfterResize);
            // THIS RUNS WHEN OUTSIDE IF STATEMENT
   }
}
$(函数(){
sizeBreakPointMin=480;
sizeBreakPointMax=520;
doneResizing();
});
函数doneResizing(){
sizeAfterResize=$(窗口).width();
//这样,您就有了一个窗口,其中这是错误的,这是因为您希望允许该窗口具有良好的大小
//你可以说窗口总是比480大,比520小
如果((sizeAfterResize=sizeBreakPointMax)){
警报('Before:'+sizeBefore);
警报('After:'+sizeAfterResize);
//当在IF语句外部时,将运行此命令
}
}
从您的代码:

 if ((sizeBefore < sizeBreakPoint) && (sizeAfterResize >= sizeBreakPoint)) {
            ...
            sizeBefore = sizeAfterResize;
 }
if((sizeBefore=sizeBreakPoint)){
...
sizeBefore=sizeAfterResize;
}
这两行不能很好地结合在一起,因为第一次这是真的,你只是说,
sizeAfterResize>=sizeBreakPoint
下一次你去检查if
sizeBefore
时,它总是比
sizeBreakPoint
更大,使得if语句无法按原样输入两次(如果您不在if之外更改
sizeBefore


希望这能有所帮助。

这不是对这个问题的直接回答,只是我自己对一个响应性
JavaScript

// calculate viewport width so that we can load js conditionally
function responsive(){
    var scaffolding = 'desktop';
    var w = parseInt($(window).innerWidth(), 10);
    if (w > 0 && w < 768) { scaffolding = 'phone'; }
    if (w >= 768 && w <= 980) { scaffolding = 'tablet'; }
    if (w > 980) { scaffolding = 'desktop'; }
    return scaffolding;
}

if ( responsive() == phone ) {
    // do stuff only on phones
}
if ( responsive() != phone ) {
    // do stuff everywhere else but phones
}
//计算视口宽度,以便有条件地加载js
功能响应(){
var scaffolding=‘桌面’;
var w=parseInt($(窗口).innerWidth(),10);
如果(w>0&&w<768){scaffolding='phone';}
如果(w>=768&&w 980){scaffolding='desktop';}
返回脚手架;
}
if(responsive()==电话){
//只在电话上做事情
}
如果(响应()!=电话){
//除了手机,其他地方都可以做
}

您可以定义每个断点代表什么以及它被调用的方式,以便在代码后面开始使用该条件时仍然有意义。

这不是问题的直接答案,只是我自己对响应的
JavaScript

// calculate viewport width so that we can load js conditionally
function responsive(){
    var scaffolding = 'desktop';
    var w = parseInt($(window).innerWidth(), 10);
    if (w > 0 && w < 768) { scaffolding = 'phone'; }
    if (w >= 768 && w <= 980) { scaffolding = 'tablet'; }
    if (w > 980) { scaffolding = 'desktop'; }
    return scaffolding;
}

if ( responsive() == phone ) {
    // do stuff only on phones
}
if ( responsive() != phone ) {
    // do stuff everywhere else but phones
}
//计算视口宽度,以便有条件地加载js
功能响应(){
var scaffolding=‘桌面’;
var w=parseInt($(窗口).innerWidth(),10);
如果(w>0&&w<768){scaffolding='phone';}
如果(w>=768&&w 980){scaffolding='desktop';}
返回脚手架;
}
if(responsive()==电话){
//只在电话上做事情
}
如果(响应()!=电话){
//除了手机,其他地方都可以做
}
您可以定义每个断点代表什么以及它被调用的方式,以便在代码后面开始使用该条件时仍然有意义。

为什么
$(function()