JavaScript 媒体查询打破了 greensock
JavaScript media queries breaking greensock
我正在尝试创建一个导航栏,当使用JavaScript和Greensock单击时,该导航栏可以滑入和滑出。出于某种原因,单击时操作在不同大小单击时随机不起作用,但有时它工作得很好。
我的代码如下,您可以在以下位置找到此导航的实时示例:http://www.kramergraphicdesign.com/Maura_Website/
var resize = function(){
var viewportWidth = $(window).width();
var lastLiWith = $('#logo').width();
console.log(openOrShut + " this is the true false var");
if ($(window).width() >= 0 && $(window).width() <= 639 ) {
console.log("mobile");
$("#logo, #close, .arrow-right").click(function()
{
console.log("mobile-click");
if(openOrShut === false)
{
TweenLite.to("#custom-nav",".5",{x:viewportWidth-lastLiWith});
openOrShut = true;
}
else{
TweenLite.to("#custom-nav",".5",{x:0});
openOrShut = false;
}
});
}
else if ($(window).width() >= 640 ) {
console.log("tablet");
$("#logo, #close, .arrow-right").click(function()
{
console.log("tablet-click");
if(openOrShut === false)
{
TweenLite.to("#custom-nav",".5",{x:400});
openOrShut = true;
}
else{
TweenLite.to("#custom-nav",".5",{x:0});
openOrShut = false;
}
});
}
else if ($(window).width() >= 1025 && $(window).width() <= 10000 ) {
console.log("dekstop");
$("#logo, #close, .arrow-right").click(function()
{
console.log("desktop-click");
if(openOrShut === false)
{
TweenLite.to("#custom-nav",".5",{x:400});
openOrShut = true;
}
else{
TweenLite.to("#custom-nav",".5",{x:0});
openOrShut = false;
}
});
}
};
$(document).ready(resize);
$(window).resize(function(){
resize();
});
首先,resize
事件可能会发生很多,尤其是在拖动以调整窗口大小期间。这意味着两件事:
- 尽量减少您所做的工作量,使其快速运行,或对函数进行去抖动(例如使用 Lodash(,以便它仅在您短时间内停止接收调整大小事件后运行。
- 更重要的是,您每次都会添加新的
click
处理程序。
因此,它"随机"不做任何事情的原因是,每当您单击时,如果您之前已经调整了窗口大小,您实际上会多次运行函数来切换菜单。如果这个次数恰好是偶数,那么就没有净效应。
可能有很多方法可以解决此问题,但这里有两种:
- 附加一次单击处理程序,但检查处理程序内部的宽度,以确定将其动画处理到多远/如何以不同的方式响应不同的大小。
- 在重新添加之前,先取消注册现有的点击事件(使用 jQuery 的
.off()
(,因此只有一个处理程序注册。我建议使用事件命名空间,以便您可以一次取消注册命名空间上的所有内容。
额外观察:您对平板电脑宽度的条件意味着桌面代码永远不会运行,因为平板电脑块没有<= 1024
条件。
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 触发媒体查询断点时刷新页面
- 让javascript知道epub3电子书中何时播放媒体覆盖
- 媒体查询/matchMedia上的脚本
- 使用按钮和媒体查询切换显示状态
- 如何在没有插件和Wordpress的情况下创建共享社交媒体
- 从新的WordPress媒体上传程序获取JS回调
- 加载dom后禁用媒体查询
- 如何制作大的自定义社交媒体按钮
- 将语句与jquery相结合,并使用媒体查询来实现返回页首按钮
- 415(不支持的媒体类型)错误
- 角度媒体播放器和动态内容
- 从媒体源源缓冲区动态附加和删除mpeg短划线段
- jPlayer播放两个媒体文件
- 媒体查询与Javascript相结合
- 访问CSS媒体查询中的屏幕宽度和高度
- 如何显示显示的html元素:在特定的媒体屏幕上没有
- 有没有一种方法可以将媒体打印css启用为普通视图
- 消除嵌入式媒体的额外间距
- JavaScript 媒体查询打破了 greensock