>  기사  >  웹 프론트엔드  >  js 정렬 애니메이션 시뮬레이션-삽입 sort_javascript 기술

js 정렬 애니메이션 시뮬레이션-삽입 sort_javascript 기술

WBOY
WBOY원래의
2016-05-16 17:51:511360검색

[Ctrl A 모두 선택 참고: 외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다
]<script><!-- window.onload = function(){ var mop = document.getElementById("mop"),frag = document.createDocumentFragment(); (function(){ var li , a; for(var i = 0; i < 25; i++){ li = document.createElement("li");//YI.newLi({className:"fac",id:"f" + i})[0]; li.className = "fac"; li.id = "f" + i; a = document.createElement("a"); li.appendChild(a); frag.appendChild( li ); } mop.appendChild(frag); })(); var facs = document.getElementsByTagName("li"), set = [], steps = []; jOne.each(facs,function(i){ var hsb="rgb(" +rand(0, 200)+","+ rand(50, 250) + ", " + rand(50, 200) + ")",// h = rand(100, 500); set.push(h); jOne.setStyle(this, {height:h + "px",left:i * 25+300}); jOne.setStyle(this.children[0], {background:hsb,width:"25px",height:h + "px"}); }); var queue = []; var bub = bubble(); bub.sort(set,queue); var dq = createDq(); dq.setDq(queue); dq.run(function(){ var reg = /(\:)|(\^)|(\-)/,arg = arguments[0],ids, elem1, elem2, ret = arg.match(reg); if(ret[1]){ ids = arg.split(/\:/); elem2 = document.getElementById("f" + ids[1]); dq.setCl( elem2.children[0] ); return; } if(ret[2]){ ids = arg.split(/\^/); elem1 = document.getElementById("f" + ids[0] ); if(ids[0] == ids[1]) return; var cl = dq.getCl(); if(elem1.children.length ){ elem1.removeChild(elem1.children[0]); elem1.appendChild(cl); }else{ elem1.appendChild(cl); } return; } if(ret[3]){ ids = arguments[0].split(/\-/); elem1 = document.getElementById("f" + ids[0] ); elem2 = document.getElementById("f" + ids[1] ); if(ids[0] == ids[1]) return; if(elem1.children.length){ elem1.removeChild(elem1.children[0]); elem1.appendChild(elem2.children[0]); }else{ elem1.appendChild(elem2.children[0]); } } }); }; function createDq(){ var dq = [], size = 0, cl; return { setDq:function(queue){ dq = queue; size = queue.length; }, queue:function(fn){ size ++; dq.push(fn); }, dqueue:function(){ size --; return dq.shift(); }, run:function(fn){ var me = this, timer; timer = setInterval(function(){ if(size <= 1){ clearInterval(timer); } fn.call(null,me.dqueue()); },100); }, setCl:function(elem){ cl = elem; }, getCl:function(){ return cl; } } } function bubble(){ var obs = []; return { addOb:function(ob){ obs.push(ob); }, sort:function(arr,q){ var len = arr.length, i = 1, j, t, cl; for(; i < len; i++){ t = arr[i]; q.push("clone:" + i); j = i ; while(j >0 && (t < (arr[j - 1]))){ q.push(j + "-" + (j - 1)); arr[j] = arr[j-1]; j--; } q.push(j + "^" + i); arr[j] = t; } }//sort }//return } var jOne = { each:function(obj,callback){ var i = 0,len = obj.length; for(var value = obj[0]; i < len && callback.call(value,i,value) !==false ; value = obj[ ++i ] ){}; }, setStyle:function(elem, opt){ var o, sty = elem.style; for(var o in opt){ sty[o] = opt[o] } } } function rand(a, b){ var ret = Math.random() * (b - a) + a; return ret >> 0; } //--></script>
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.