jquery - 如何使 jQuery 动画看起来流畅?

标签 jquery html css

我在这个动画上坐了很长时间,想不出让它工作的最佳方式。我希望第一个和第二个 li 元素会慢慢淡出,同时第六个和第七个元素会淡入,而所有元素都慢慢向左移动。 这是我的动画的样子,完全不是我想要的.. https://jsfiddle.net/nqo65mcd/2/

jQuery(document).ready(function() {
    jQuery('.feedbak-logo li').slice(5).hide();
});

jQuery('.feedbak-logo li').click(function (){
  jQuery('.feedbak-logo li[data-number = "1"]').fadeOut({queue: false, duration: '500'});
  jQuery('.feedbak-logo li[data-number = "2"]').fadeOut({queue: false, duration: '1000'});
  position = 80;
  jQuery('.feedbak-logo li').animate({queue: false,left: '-='+position+'px'}, 1000);
  jQuery('.feedbak-logo li[data-number = "6"]').fadeIn({queue: false, duration: '500'});
  jQuery('.feedbak-logo li[data-number = "7"]').fadeIn({queue: false, duration: '1000'});
});

最佳答案

Jquery 动画已经足够好了,人们说它很慢等等,但就浏览器兼容性和性能而言,它是目前可用的最好的。 当然,一旦安装,greensock 会更快,但似乎没有人计算额外的服务器请求,CSS 存在跨浏览器问题,jQuery animate 方法尽管以速度慢而闻名,但如果你已经运行 jquery 并且对于中小型企业来说,它是最好的大型元素。

代码的相关部分:

 $(document).ready(function() {
 var items = $('.feedbak-logo li');
 items.slice(5).hide();
 });
 var items = $('.feedbak-logo li');
 items.click(function() {
 items.eq(0).fadeOut(1000);
 items.eq(1).fadeOut(1000);

items.eq(0).animate({
left: 50
}, {
duration: 1000,
step: function(now, fx) {
  items.gt(0).css("left", now);
}
});
items.eq(5).fadeIn(1000);
items.eq(6).fadeIn(1000);
});

这是改进后的代码,其中一切运行平稳,没有跳动。

$('#one').click(function(){
original();
});
$('#two').click(function(){
backToOriginal();
});


function original() {
var items = $('.feedbak-logo li');
items.slice(5).css({'opacity': 0});

items.eq(0).animate({opacity: 0, left:'-30px'},500);
items.eq(1).animate({opacity: 0, left:'-30px'},500);
items.eq(5).animate({opacity: 1},500);
items.eq(6).animate({opacity: 1},500);
items.each(function(i) {
setTimeout(function() {

  items.removeClass("nonAnimated").addClass("animated");
}, 200 * i);


});
}

function backToOriginal() {
var items = $('.feedbak-logo li');


items.eq(0).animate({opacity: 1, left:'30px'},500);
items.eq(1).animate({opacity: 1, left:'30px'},500);
items.eq(5).animate({opacity: 0},500);
items.eq(6).animate({opacity: 0},500);
items.each(function(i) {
setTimeout(function() {
  items.removeClass("animated")
    .addClass
  ("nonAnimated");

}, 100 * i);


});
}

代码笔:

http://codepen.io/damianocel/pen/grRaEW

我不知道从哪里开始,彻底了解 jquery animate 文档,它确实是所有坏东西中最不糟糕的。当客户问您为什么网站无法在一半的移动浏览器中运行时,这一点就很清楚了。

不要选择那样的元素,始终使用 Jquery 缓存 DOM 元素引用,尤其是动画。

对于原生 JS 中有点不同的方法,试试这个:

http://codepen.io/damianocel/pen/PzYXmv

不知道这是否有用,但这是一个非常相似的原生 js 实现,我可以完全按照你的要求做,但明天。

关于jquery - 如何使 jQuery 动画看起来流畅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38172973/

相关文章:

javascript - 函数无需调用函数的类即可工作

html - Angular 中的可滚动路由器导出

javascript - 如何设置一个 div (#jumbotron) 是视口(viewport)的高度减去动态变化的另一个 div (#header) 的高度

html - 表格的标题在 chrome 的打印窗口中分为两页

css - 过滤数据时过渡不平滑

html - IE7 CSS Mega 菜单问题

jquery - 如何通过单击主体上的任意位置来关闭侧面菜单(插件)?

javascript - 将背景大小和背景位置的相对值转换为绝对 PX 值

jquery - 如何管理具有相同类的元素列表中的 X 元素

javascript - 字形图标(Halflings 和 Fontawesome)未显示。纯 html 与使用 js innerHTML