我的页面上有一个菜单,每个按钮都附有一些 jquery 动画。我正在使网站响应,并希望在调整窗口大小时删除所有 Jquery 动画,并添加单独的CSS3动画(以获得更好的移动性能)。
我尝试在按钮上切换功能的方法是删除与该按钮关联的桌面类并添加移动类,从而删除桌面类中关联的任何 jquery 函数并添加移动类中的css3函数。
到目前为止,这是我的代码:
$(window).resize(function() {
if ($(window).width() <= 900) {
$(".aboutbutton").toggleClass("aboutbuttondesktop");
}
});
因此,当我成功删除桌面类时,.animate
函数仍然存在。如何删除此类和处理程序+添加我的新类和处理程序?有一个搜索回合和一些关于传播的文档,但
无法成功实施停止传播代码。
$('.aboutbutton').on("click", ".aboutbutton", function () {
$(".arrow-up").animate({
borderBottomColor: "rgb(37,164,171)"
},850);
$(".topnavi").animate({
"background-color": "rgb(37,164,171)"
},850);
$(".headercurrent").animate({
"margin-left":"147px",
"background-color": "rgb(37,164,171)",
width: 92
},850,"easeInOutQuint");
$('.homecontainer,.aboutcontainer,.contactcontainer,.musiccontainer,.portfoliocontainer,.backgroundimage').removeClass('elementhovered');
$(".backgroundimage").fadeOut(800);
setTimeout(function () {
$(".backgroundimage").fadeIn(800);
}, 800);
setTimeout(function () {
$('.backgroundimage').css({
"background-image": "url(Aboutmeblur.jpg)",
'background-size': "cover"
});
$('.backgroundimage').css({
"background-repeat": "no-repeat"
});
}, 800);
//fades unwanted pages
$('.homecontainer,.musiccontainer, .portfoliocontainer, .contactcontainer').fadeOut({
queue: false,
duration: 700
});
//animates up unwanted pages
$('.homecontainer, .musiccontainer, .portfoliocontainer, .contactcontainer').animate({
'margin-Top': "-1000px"
}, 400, 'easeInBack');
//brings in selected page with a 0.7 second pause
setTimeout(function () {
$('.aboutcontainer ').fadeIn({
queue: false,
duration: 100
});
$(".aboutcontainer").animate({
marginTop: "115px"
}, 1200, 'easeOutQuint');
}, 700);
});
$('.aboutbutton').one("click", function () {
setTimeout(function () {
$(".aboutcontainer").load("about.php");
}, 1200);
});
答案 0 :(得分:1)
您的delegated event应该更像这样:
$("body").on("click", ".aboutbutton", function(){
//...
});
应该重新调整你的resize事件以相应地替换类:
$(window).resize(function() {
if ($(window).width() >= 900) {
$(".aboutbutton").removeClass("aboutbutton").addClass("aboutbuttondesktop");
} else {
$(".aboutbuttondesktop").removeClass("aboutbuttondesktop").addClass("aboutbutton");
}
});
最后,如果浏览器已经在你的900px断点下/上,你应该调用你的resize事件。
$(window).resize();
这是一个演示:http://jsfiddle.net/Lkx4pa0z/
调整大小以查看课程更改。点击它...只有.aboutbutton
可点击。
答案 1 :(得分:1)
如果我理解正确,您希望将大量动画工作量转移到css,但您又担心为IE9用户提供支持。如果我做对了,您可以考虑在css中制作所有动画,然后有条件地加载一个单独的javascript文件作为那些浏览器不支持css过渡/变换/动画的人的后备。
这就是原因:
为IE完成此操作的一种简单方法是使用条件注释:
<!--[if lte IE 9]>
<script type="text/javascript" async src="your-jQuery-Animation-Fallback.js"></script>
<![endif]-->
如果浏览器是&#39; lte&#39;这只会加载javascript文件。或者小于或等于IE 9。
如果您想要更广泛的覆盖范围,您可以使用像Modernizr这样的库,并进行特定的功能检测,然后使用内置的加载方法来添加您的jQuery回退。如:
Modernizr.load({
test: Modernizr.csstransitions, //or whatever you need support for
nope: 'your-jQuery-Animation-Fallback.js'
});
这可能会让您支持Opera-mini或旧版Android(ca.v2.3)等浏览器。
同样,如果您不想使用Modernizr,但仍想进行功能检测,则可以创建自己的功能。值得注意的是,对matchMedia和css转换,转换和动画的支持都很好地对齐。因此,您可以通过使用它来运行测试来利用这一事实,如果是真的,则使用jQuery的$ .getScript方法加载脚本:
if(typeof window.matchMedia == 'undefined') {
$.getScript( 'your-jQuery-Animation-Fallback.js' );
};
我知道这个问题已经得到了解答,我知道我可能会因为没有回答被问到的问题而被串起来。&#34;尽管如此,我认为值得分享。