首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >抖动jQuery动画

抖动jQuery动画
EN

Stack Overflow用户
提问于 2016-04-25 12:49:27
回答 1查看 55关注 0票数 0

HTML

代码语言:javascript
复制
<div class="phone">
  <a href="#" >
    <img src="/assets/phonenew.png" alt="" height="90px" width="90px" />
  </a>
</div>

<div class="phone-number">
  <a href="#">
    <img src="/assets/phonenumber.png" class="phone-full" height="45px" />
  </a>
</div>

CSS

代码语言:javascript
复制
.phone {
 position: absolute;
 top: 200px;
 left: 915px;
 cursor: pointer;
 z-index: 100;
}

.phone-number {
  position: absolute;
  top: 225px;
  left: 908px;
  display: none;
  cursor: pointer;
  font-family: 'Open Sans';
  font-size: 28px;
  color: rgb(68, 69, 67);
}

这是我用来使我的电话图标(phonenew.png)在鼠标入口显示.phone- jQuery时向左滑动,然后在鼠标离开时向右滚动,隐藏.phone-number的图标。这个动画非常抖动。我想我漏掉了排队之类的步骤..

代码语言:javascript
复制
    $.fn.animateRotate = function(angle,prevAngle, duration, easing, complete) {
  var args = $.speed(duration, easing, complete);
  var step = args.step;
  return this.each(function(i, e) {
      args.complete = $.proxy(args.complete, e);
      args.step = function(now) {
          $.style(e, 'transform', 'rotate(' + now + 'deg)');
          if (step) return step.apply(e, arguments);
      };

      $({deg: prevAngle}).animate({deg: angle}, args);
  });
 };
var angle = 0;
var prevAngle = 0;

$(".phone").mouseenter(function(e) {
  prevAngle = angle
  angle -= 100;
  $(this).animateRotate(angle, prevAngle, 250);
  e.preventDefault();
  $(this).animate({
    left: "800px",
    opacity: 1
  }, {
    duration: 300,
    queue: false
  });
  $(".phone-number").fadeIn(1000);
  // $(".phone-number").show("slide", 400);
});
$(".phone").mouseleave(function(e) {
prevAngle = angle
angle += 100;
$(this).animateRotate(angle, prevAngle, 350);
e.preventDefault();
$(this).animate({
  left: "905px",
  opacity: 1
  }, {
    duration: 300,
    queue: false
  });
  $(".phone-number").hide("slide", "easeInQuart", 300);
});
EN

回答 1

Stack Overflow用户

发布于 2016-04-25 13:33:20

所以,是的。我强烈建议是时候开始使用Chrome浏览器和它的开发工具了。我已经从您的代码摘录中创建了(一个草率的) JSFiddle。这并不完美,我不得不改变一些东西。注意:我使用的是jQuery 2.2.3,您使用的是什么版本?

点击这里:https://jsfiddle.net/ubv51rdk/9/

当我开始动画时,我立即看到一个重复的错误:

Uncaught TypeError: n.easing[this.easing] is not a function

根据https://api.jquery.com/jQuery.speed/的说法,宽松的论点默认是"swing“,但你只是在使用”宽松“这个词,你必须在那里放置其他东西……有很多选择。查看https://api.jqueryui.com/easings/

我会建议..。当你编写代码的时候,你总是要不断地学习和尝试新的东西。只是要小心不要伸展太多..您应该努力始终理解程序中的每一行代码都做了什么。(我们很多人都打破了这条规则...)对于从未使用过Chrome DevTools来理解JavaScript在幕后是如何工作的人来说,这个程序的编写是一个巨大的延伸。几乎太多了。带有复杂的args对象的animateRotate函数并不容易理解。函数调用的输入没有被使用( easingcomplete)的事实,以及围绕args.complete = $.proxy(args.complete, e);和下面的step函数的完全令人困惑的问题让我抓狂。

没有看到原始代码的原始形式,这是非常令人沮丧的。你有推荐人吗?这是来自财富之轮的例子吗?

所以,我试着一步一步通过代码,显然JS fiddle已经改变了它的格式。我不明白如何在JS fiddle中对变量进行监视并逐步执行代码。开销太大了。我认为这必须在一个简单的网站上完成,无论是在本地主机上还是在某个地方托管在web上。如果您这样做,并逐步执行代码,您将希望查看args对象。我不清楚complete是如何工作的,也不清楚为什么我的swing输入仍然会产生错误。

我准备删除我的答案,祝你好运,继续前进。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36832192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档