javascript - 为什么事件(webkitTransitionEnd)会触发三次

标签 javascript css

我的动画只改变了一个属性(字体大小), 但是事件触发了三次。为什么???

CSS:

.fadein{
  font-size:2em;
  -webkit-transition:all 3s ease-in-out;
}

JavaScript

$(document).ready(function(){

  $("button").on('click',function(){
    $("div p").eq(0).addClass("fadein").on('webkitTransitionEnd',function(e){
    console.log(e);
    });
  });
});

html:

<div>
<p>toggle paragraph</p>
</div>
<button>toggle</button>

http://codepen.io/ShawnHuang/pen/LIlvr

最佳答案

它似乎确实在为 3 个属性设置动画:margin-topfont-sizemargin-bottom:

var propertyName = e.propertyName || e.originalEvent.propertyName;
console.log(propertyName);

参见 http://codepen.io/anon/pen/Fwfty

编辑

获取所有属性有点棘手。我在 http://jsfiddle.net/ZD2fY/1/ 做了一个例子:

$.fn.onWebkitTransitionEnd = function(callback) {
  var $this = this;
  var properties = [];
  var events = [];
  var onFinished = function() {
    if (callback) {
      callback(properties, events);
    }
    $this.off('webkitTransitionEnd', onWebkitTransitionEnd);
  };
  var finishTimeout = null;
  var onWebkitTransitionEnd = function(e) {
      var propertyName = e.propertyName || e.originalEvent.propertyName;
      properties.push(propertyName);
      events.push(e);
      clearTimeout(finishTimeout);
      finishTimeout = setTimeout(onFinished, 0);
  };
  $this.on('webkitTransitionEnd', onWebkitTransitionEnd);
};

那么你可以这样调用它:

$("div p").eq(0).addClass("fadein").onWebkitTransitionEnd(function(properties, events) {
  console.log(properties, events);
});

关于javascript - 为什么事件(webkitTransitionEnd)会触发三次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17789959/

相关文章:

css - 使用带/不带回车的无序列表的菜单在 IE 6 中有所不同

css - 更改div或div的内容?

javascript - 如何在 Highcharts 的 yAxis 中设置非线性步长

javascript - Phonegap/Cordova 文件系统 dirEntry.isDirectory 在应该简单地为 false 时生成错误

javascript - JSON.stringify 函数

html - 如何将文本移动到页面右侧?

javascript - 回调函数返回未定义?

javascript - 表单被多次提交

javascript - 仅滚动正文文档中的选定内容

javascript - 为什么进度条不能正常工作?