响应式javascript
任何人都可以用一个狡猾的if语句来帮助我吗?尽管我可能会尝试,但我看不出它有任何错误,代码在if语句之外工作:响应式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
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
下一次你去检查ifsizeBefore
时,它总是比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
下一次你去检查ifsizeBefore
时,它总是比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()