让Yui-tree有ext一样的expand和collapse的animation

来源:互联网 发布:网络课程怎么快进 编辑:程序博客网 时间:2024/05/22 14:35


修改treeview.js 添加以下代码:
  1. var ecIsAnim=false;//防止高频率点击节点造成的错误
  2. YAHOO.widget.SlidUp = function(el, callback) {
  3.     this.el = el;
  4.     this.callback = callback;
  5. };
  6. YAHOO.widget.SlidUp.prototype = {
  7.     animate: function() {
  8.     
  9.         if(ecIsAnim)
  10.            return;
  11.         var tvanim = this;
  12.         var dur = 0.3;
  13.         
  14.     var n=this.el;
  15.     var pn=n.parentNode;
  16.     n.position="absolute";
  17.             
  18.     var div=document.createElement("div");
  19.     div.style.position="relative";
  20.     div.style.overflow="hidden";
  21.     pn.insertBefore(div,n);
  22.     div.appendChild(n);
  23.         
  24.     var a1 = new YAHOO.util.Anim(n,{top:{to:-n.offsetHeight}},dur); 
  25.     var a2= new YAHOO.util.Anim(div,{height:{to:0}},dur);
  26.     a1.onComplete.subscribe(function(){ tvanim.onComplete(div,pn,n);});
  27.         ecIsAnim=true;
  28.         a1.animate();
  29.         a2.animate();
  30.     
  31.     },
  32.     onComplete: function(div,pn,n) {
  33.         var s = n.style;
  34.         s.display="none";
  35.         n.position="relative";
  36.     s.top="0";
  37.         
  38.         pn.insertBefore(n,div);
  39.     pn.removeChild(div);
  40.         ecIsAnim=false;
  41.         this.callback();
  42.     },
  43.     toString: function() {
  44.         return "SlidUp";
  45.     }
  46. };
  47. YAHOO.widget.SlidDown = function(el, callback) {
  48.     this.el = el;
  49.     this.callback = callback;
  50. };
  51. YAHOO.widget.SlidDown.prototype = {
  52.     
  53.     animate: function() {
  54.         if(ecIsAnim)
  55.            return;
  56.         var tvanim = this;
  57.         var dur = 0.3; 
  58.         
  59.     var n=this.el;
  60.     var pn=n.parentNode;
  61.     var div=document.createElement("div");
  62.     div.style.position="relative";
  63.     div.style.height="0";
  64.     div.style.overflow="hidden";
  65.     pn.insertBefore(div,n);
  66.     div.appendChild(n);
  67.         
  68.     n.position="absolute";
  69.     n.style.display="block";
  70.     n.style.height=n.offsetHeight;
  71.     n.style.top=-n.offsetHeight+"px";
  72.         
  73.     var a1 = new YAHOO.util.Anim(n,{top:{to:0}},dur); 
  74.     var a2= new YAHOO.util.Anim(div,{height:{to:n.offsetHeight}},dur);
  75.     a1.onComplete.subscribe(function(){ tvanim.onComplete(div,pn,n);});
  76.         ecIsAnim=true;
  77.         a2.animate();
  78.     a1.animate();   
  79.     },
  80.     onComplete: function(div,pn,n) {
  81.     var s = n.style;
  82.         n.position="relative";
  83.     s.top="0";
  84.         
  85.         pn.insertBefore(n,div);
  86.     pn.removeChild(div);
  87.         ecIsAnim=false;
  88.         this.callback();
  89.     },
  90.     toString: function() {
  91.         return "SlidDown";
  92.     }
  93. };
使用的时候代码:
  1. tree = new YAHOO.widget.TreeView("your Div id");
  2.   tree.setExpandAnim("SlidDown");
  3.   tree.setCollapseAnim("SlidUp");
修改treeview.css这个很重要:
  1. /* the style of the div around each node's collection of children */
  2. .ygtvchildren {position:relative }  //重要
  3. * html .ygtvchildren { height:1%;position:relative }  
  1. /*
  2.   over
  3. */


原创粉丝点击