最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

css3的animationend会执行多次

来源:懂视网 责编:小采 时间:2020-11-27 18:53:59
文档

css3的animationend会执行多次

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 {
推荐度:
导读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 {

-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);

文档

css3的animationend会执行多次

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 {
推荐度:
标签: 执行 css animation
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top