您好,欢迎访问一九零五行业门户网

css3 的animationend 会执行多次

-webkit-keyframes banner-slide-70 { 0%{ opacity:0;-webkit-transform:translatey(70px) } 100%{ opacity:1; }} @-moz-keyframes banner-slide-70 { 0%{ opacity:0;-moz-transform:translatey(70px) } 100%{ opacity:1; }} @-o-keyframes banner-slide-70 { 0%{ opacity:0;-o-transform:translatey(70px) } 100%{ opacity:1; }} @keyframes banner-slide-70 { 0%{ opacity:0;-webkit-transform:translatey(70px);-moz-transform:translatey(70px);-ms-transform:translatey(70px);transform:translatey(70px);} 100%{ opacity:1; }}
.seven { background: url(../common/img/sec/banner/7.png) center bottom no-repeat; -webkit-animation: banner-slide-70 0.8s ease-out 0.8s 1; -moz-animation: banner-slide-70 0.8s ease-out 0.8s 1; -o-animation: banner-slide-70 0.8s ease-out 0.8s 1; animation: banner-slide-70 0.8s ease-out 0.8s 1; }
对于这样的效果,背景图片会首次就加载进来,先show一下,再开始动画。
最后在css 里面先写上opacity: 0; 然后再animationend事件里面写上opacity;
但是又发现animationend 会执行多次,而且有的还不执行。
最后的解决方法是,重置事件:
function getwx() { var wn = {}; var body = document.body || document.documentelement; var style = body.style; var transition = 'transition'; var transitionend; var animationend; var vendorprefix; transition = transition.charat(0).touppercase() + transition.substr(1); vendorprefix = (function () {//现在的opera也是webkit var i = 0; var vendor=['moz', 'webkit', 'khtml', 'o', 'ms']; while (i < vendor.length) { if (typeof style[vendor[i] + transition] === 'string') { return vendor[i]; } i++; } return false; })(); transitionend = (function () { var transendeventnames = { webkittransition: 'webkittransitionend', moztransition: 'transitionend', otransition: 'otransitionend otransitionend', transition: 'transitionend' }; for(var name in transendeventnames){ if(typeof style[name] === 'string'){ return transendeventnames[name]; } } })(); animationend = (function(){ var animendeventnames = { webkitanimation: 'webkitanimationend', animation: 'animationend' }; for(var name in animendeventnames){ if (typeof style[name] === 'string'){ return animendeventnames[name]; } } })(); wn.addtranevent=function(elem, fn, duration){ var called = false; var fncallback = function() { if(!called){ fn(); called = true; } }; function hand(){ elem.addeventlistener(transitionend, function () { elem.removeeventlistener(transitionend, arguments.callee, false); fncallback(); }, false); } settimeout(hand,duration); }; wn.addanimevent=function(elem,fn) { elem.addeventlistener(animationend, fn, false); }; wn.removeanimevent = function(elem, fn){ elem.removeeventlistener(animationend,fn,false); }; wn.setstyleattribute = function(elem, val) { if(object.prototype.tostring.call(val) === '[object object]'){ for(var name in val){ if(/^transition|animation|transform/.test(name)){ var stylename = name.charat(0).touppercase() + name.substr(1); elem.style[vendorprefix+stylename]=val[name]; } else { elem.style[name] = val[name]; } } } }; wn.transitionend = transitionend; wn.vendorprefix = vendorprefix; wn.animationend = animationend; return wn; }
调用方式:
var timer; var position = $('.position'); // position 就是要执行动画的dom var hasanimation = false; u.each(position, function (item, key) { var name = $(item).get(0); getwx().addanimevent(name, function () { $(item).css({opacity: 1}); hasanimation = true; }); }); timer = settimeout(function () { if (!hasanimation) { position.css({opacity: 1}); } }, 1000);
其它类似信息

推荐信息