首页 > 网站 > WEB开发 > 正文

超厉害的CSS3图片破碎爆炸效果!

2024-04-27 14:18:47
字体:
来源:转载
供稿:网友

超厉害的CSS3图片破碎爆炸效果!

java代码收藏代码
  1. varfx={
  2. buffer:function(obj,cur,target,fnDo,fnEnd,fs){
  3. if(!fs)fs=6;
  4. varnow={};
  5. varx=0;
  6. varv=0;
  7. if(!obj.__last_timer)obj.__last_timer=0;
  8. vart=newDate().getTime();
  9. if(t-obj.__last_timer>20)
  10. {
  11. fnMove();
  12. obj.__last_timer=t;
  13. }
  14. clearInterval(obj.timer);
  15. obj.timer=setInterval(fnMove,20);
  16. functionfnMove(){
  17. v=Math.ceil((100-x)/fs);
  18. x+=v;
  19. for(variincur)
  20. {
  21. now[i]=(target[i]-cur[i])*x/100+cur[i];
  22. }
  23. if(fnDo)fnDo.call(obj,now);
  24. if(Math.abs(v)<1&&Math.abs(100-x)<1)
  25. {
  26. clearInterval(obj.timer);
  27. if(fnEnd)fnEnd.call(obj,target);
  28. }
  29. }
  30. },
  31. flex:function(obj,cur,target,fnDo,fnEnd,fs,ms){
  32. varMAX_SPEED=16;
  33. if(!fs)fs=6;
  34. if(!ms)ms=0.75;
  35. varnow={};
  36. varx=0;//0-100
  37. if(!obj.__flex_v)obj.__flex_v=0;
  38. if(!obj.__last_timer)obj.__last_timer=0;
  39. vart=newDate().getTime();
  40. if(t-obj.__last_timer>20)
  41. {
  42. fnMove();
  43. obj.__last_timer=t;
  44. }
  45. clearInterval(obj.timer);
  46. obj.timer=setInterval(fnMove,20);
  47. functionfnMove(){
  48. obj.__flex_v+=(100-x)/fs;
  49. obj.__flex_v*=ms;
  50. if(Math.abs(obj.__flex_v)>MAX_SPEED)obj.__flex_v=obj.__flex_v>0?MAX_SPEED:-MAX_SPEED;
  51. x+=obj.__flex_v;
  52. for(variincur)
  53. {
  54. now[i]=(target[i]-cur[i])*x/100+cur[i];
  55. }
  56. if(fnDo)fnDo.call(obj,now);
  57. if(Math.abs(obj.__flex_v)<1&&Math.abs(100-x)<1)
  58. {
  59. clearInterval(obj.timer);
  60. if(fnEnd)fnEnd.call(obj,target);
  61. obj.__flex_v=0;
  62. }
  63. }
  64. },
  65. linear:function(obj,cur,target,fnDo,fnEnd,fs){
  66. if(!fs)fs=50;
  67. varnow={};
  68. varx=0;
  69. varv=0;
  70. if(!obj.__last_timer)obj.__last_timer=0;
  71. vart=newDate().getTime();
  72. if(t-obj.__last_timer>20)
  73. {
  74. fnMove();
  75. obj.__last_timer=t;
  76. }
  77. clearInterval(obj.timer);
  78. obj.timer=setInterval(fnMove,20);
  79. v=100/fs;
  80. functionfnMove(){
  81. x+=v;
  82. for(variincur)
  83. {
  84. now[i]=(target[i]-cur[i])*x/100+cur[i];
  85. }
  86. if(fnDo)fnDo.call(obj,now);
  87. if(Math.abs(100-x)<1)
  88. {
  89. clearInterval(obj.timer);
  90. if(fnEnd)fnEnd.call(obj,target);
  91. }
  92. }
  93. },
  94. stop:function(obj){
  95. clearInterval(obj.timer);
  96. },
  97. move3:function(obj,json,fnEnd,fTime,sType){
  98. varaddEnd=fx.addEnd;
  99. fTime||(fTime=1);
  100. sType||(sType='ease');
  101. setTimeout(function(){
  102. Utils.setStyle3(obj,'transition',sPRintf('%1sall%2',fTime,sType));
  103. addEnd(obj,function(){
  104. Utils.setStyle3(obj,'transition','none');
  105. if(fnEnd)fnEnd.apply(obj,arguments);
  106. },json);
  107. setTimeout(function(){
  108. if(typeofjson=='function')
  109. json.call(obj);
  110. else
  111. Utils.setStyle(obj,json);
  112. },0);
  113. },0);
  114. }
  115. };
  116. //监听css3运动终止
  117. (function(){
  118. varaListener=[];//{obj,fn,arg}
  119. if(!Modernizr.csstransitions)return;
  120. if(window.navigator.userAgent.toLowerCase().search('webkit')!=-1)
  121. {
  122. document.addEventListener('webkitTransitionEnd',endListrner,false);
  123. }
  124. else
  125. {
  126. document.addEventListener('transitionend',endListrner,false);
  127. }
  128. functionendListrner(ev)
  129. {
  130. varoEvObj=ev.srcElement||ev.target;
  131. //alert(aListener.length);
  132. for(vari=0;i<aListener.length;i++)
  133. {
  134. if(oEvObj==aListener[i].obj)
  135. {
  136. aListener[i].fn.call(aListener[i].obj,aListener[i].arg);
  137. aListener.remove(aListener[i--]);
  138. }
  139. }
  140. }
  141. fx.addEnd=function(obj,fn,arg)
  142. {
  143. if(!obj||!fn)return;
  144. aListener.push({obj:obj,fn:fn,arg:arg});
  145. }
  146. })();
  147. $(function(){
  148. varnow=0;
  149. varready=true;
  150. varW=700;
  151. varH=400;
  152. var$img=$("#img");
  153. varoDiv=$img.get(0);
  154. varnext=function(){
  155. return(now+1)%3;
  156. }
  157. //爆炸
  158. $("#btn_explode").on("click",function(){
  159. if(!ready)return;
  160. ready=false;
  161. varR=4;
  162. varC=7;
  163. varcw=W/2;
  164. varch=H/2;
  165. oDiv.innerHTML='';
  166. oDiv.style.background='url(images/'+(next()+1)+'.jpg)centerno-repeat';
  167. varaData=[];
  168. varwait=R*C;
  169. for(vari=0;i<R;i++){
  170. for(varj=0,k=0;j<C;j++,k++)
  171. {
  172. aData[i]={left:W*j/C,top:H*i/R};
  173. varoNewDiv=$('<div>');
  174. oNewDiv.css({
  175. position:'absolute',
  176. width:Math.ceil(W/C)+'px',
  177. height:Math.ceil(H/R)+'px',
  178. background:'url(images/'+(now+1)+'.jpg)'+-aData[i].left+'px'+-aData[i].top+'pxno-repeat',
  179. left:aData[i].left+'px',
  180. top:aData[i].top+'px'
  181. });
  182. oDiv.appendChild(oNewDiv[0]);
  183. varl=((aData[i].left+W/(2*C))-cw)*Utils.rnd(2,3)+cw-W/(2*C);
  184. vart=((aData[i].top+H/(2*R))-ch)*Utils.rnd(2,3)+ch-H/(2*R);
  185. setTimeout((function(oNewDiv,l,t){
  186. returnfunction()
  187. {
  188. fx.buffer(
  189. oNewDiv,
  190. {left:oNewDiv.offsetLeft,
  191. top:oNewDiv.offsetTop,
  192. opacity:100,
  193. x:0,
  194. y:0,
  195. z:0,
  196. scale:1,
  197. a:0
  198. },
  199. {left:l,
  200. top:t,
  201. opacity:0,
  202. x:Utils.rnd(-180,180),
  203. y:Utils.rnd(-180,180),
  204. z:Utils.rnd(-180,180),
  205. scale:Utils.rnd(1.5,3),
  206. a:1
  207. },
  208. function(now){
  209. this.style.left=now.left+'px';
  210. this.style.top=now.top+'px';
  211. this.style.opacity=now.opacity/100;
  212. Utils.setStyle3(oNewDiv,'transform','perspective(500px)rotateX('+now.x+'deg)rotateY('+now.y+'deg)rotateZ('+now.z+'deg)scale('+now.scale+')');
  213. },function(){
  214. setTimeout(function(){
  215. oDiv.removeChild(oNewDiv);
  216. },200);
  217. if(--wait==0)
  218. {
  219. ready=true;
  220. now=next();
  221. }
  222. },10
  223. );
  224. };
  225. })(oNewDiv[0],l,t),Utils.rnd(0,200));
  226. }
  227. }
  228. });
  229. //翻转
  230. $("#btn_tile").on("click",function(){
  231. if(!ready)return;
  232. ready=false;
  233. varR=3;
  234. varC=6;
  235. varwait=R*C;
  236. vardw=Math.ceil(W/C);
  237. vardh=Math.ceil(H/R);
  238. oDiv.style.background='none';
  239. oDiv.innerHTML='';
  240. for(vari=0;i<C;i++)
  241. {
  242. for(varj=0;j<R;j++)
  243. {
  244. varoNewDiv=document.createElement('div');
  245. vart=Math.ceil(H*j/R);
  246. varl=Math.ceil(W*i/C);
  247. Utils.setStyle(oNewDiv,{
  248. position:'absolute',background:'url(images/'+(now+1)+'.jpg)'+-l+'px'+-t+'pxno-repeat',
  249. left:l+'px',top:t+'px',width:dw+'px',height:dh+'px'
  250. });
  251. (function(oNewDiv,l,t){
  252. oNewDiv.ch=false;
  253. setTimeout(function(){
  254. fx.linear(oNewDiv,{y:0},{y:180},function(now){
  255. if(now.y>90&&!oNewDiv.ch)
  256. {
  257. oNewDiv.ch=true;
  258. oNewDiv.style.background='url(images/'+(next()+1)+'.jpg)'+-l+'px'+-t+'pxno-repeat';
  259. }
  260. if(now.y>90)
  261. {
  262. Utils.setStyle3(oNewDiv,'transform','perspective(500px)rotateY('+now.y+'deg)scale(-1,1)');
  263. }
  264. else
  265. {
  266. Utils.setStyle3(
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表