Нужна помощь гуру JS

#1 15 ноября 2012 в 22:16
Уважаемые господа, очень нужна помощь знатоков JS

Есть такой скрипт


  1.  
  2. dojo.declare("AccordionMenu", null, {
  3. constructor: function(args) {
  4. this.interval = 1000;
  5. this.mode = 'onclick';
  6. this.classPattern = /off-nav-[0-9]+/;
  7. dojo.mixin(this,args);
  8. this.enabled = true;
  9. window.accordion = new Object;
  10. window.accordion.running = false;
  11. this.init();
  12. },
  13.  
  14. init: function(){
  15. dojo.forEach(dojo.query('a', this.node), function(el){
  16. var href = dojo.attr(el, 'href');
  17. if(href != undefined && href != '' && href != '#'){
  18. dojo.connect(el, 'onclick', function(e){
  19. e.cancelBubble = true;
  20. });
  21. }
  22. });
  23.  
  24. this.opened = -1;
  25. this.dts = dojo.query('dt.parent.level'+this.level, this.node);
  26. this.dds = dojo.query('dd.parent.level'+this.level, this.node);
  27. this.forceopened = false;
  28. this.dts.forEach(function(el, i){
  29. el.i = i;
  30. if(dojo.hasClass(this.dds[i], 'opened')){
  31. this.opened = i;
  32. }
  33. if(!dojo.hasClass(el, 'forceopened')){
  34. if(this.mode == 'both'){
  35. dojo.connect(el, 'onclick', dojo.hitch(this,'onOpenOrClose'));
  36. dojo.connect(el, 'onmouseenter', dojo.hitch(this,'onOpenOrClose'));
  37. }else{
  38. dojo.connect(el, this.mode, dojo.hitch(this,'onOpenOrClose'));
  39. }
  40. }else{
  41. this.forceopened = true;
  42. }
  43.  
  44. this.dds[i].dl = dojo.query('> dl', this.dds[i])[0];
  45.  
  46. new AccordionMenu({
  47. node : this.dds[i].dl,
  48. level : this.level+1,
  49. mode: this.mode,
  50. interval : this.interval,
  51. easing : this.easing,
  52. instance: this.instance,
  53. classPattern: this.classPattern,
  54. accordionmode: this.accordionmode
  55. });
  56. }, this);
  57. if(this.forceopened){
  58. this.accordionmode = 0;
  59. }
  60. if(this.accordionmode == 2 && this.opened >= 0){
  61. if(this.node.mmanim && this.node.mmanim.status() == "playing"){
  62. this.node.mmanim.stop();
  63. }
  64. var pos = dojo.position(this.node).y-dojo.position(this.dts[this.opened]).y;
  65. dojo.style(this.node, 'marginTop', pos+'px');
  66. }
  67. },
  68.  
  69. onOpenOrClose: function(e){
  70. var el = e.currentTarget;
  71. if((this.mode == "onmouseenter" || (this.mode == "both" && e.type != 'click') ) && dojo.hasClass(el, 'opened')) return;
  72. if(window.accordion.running)
  73. return;
  74. else
  75. window.accordion.running = true;
  76. var h = parseInt(dojo.position(this.dds[el.i]).h);
  77. if(dojo.hasClass(el, 'opening') || dojo.hasClass(el, 'opened')){
  78. this.close(el.i);
  79. }else{
  80. if(this.accordionmode != 0 && this.opened >= 0 && this.opened != el.i){
  81. this.close(this.opened);
  82. }
  83. this.open(el.i);
  84. }
  85. },
  86.  
  87. open: function(i){
  88. var dt = this.dts[i];
  89. var dd = this.dds[i];
  90. if(dd.wwanim && dd.wwanim.status() == "playing"){
  91. dd.wwanim.stop();
  92. dojo.removeClass(dt, 'closing');
  93. dojo.removeClass(dd, 'closing');
  94. }
  95. dojo.removeClass(dt, 'closed');
  96. dojo.removeClass(dd, 'closed');
  97. dojo.addClass(dt, 'opening');
  98. dojo.addClass(dd, 'opening');
  99.  
  100. if(this.accordionmode == 2){
  101. if(this.node.mmanim && this.node.mmanim.status() == "playing"){
  102. this.node.mmanim.stop();
  103. }
  104.  
  105. var pos = dojo.position(this.node).y-dojo.position(dt).y;
  106. if(this.dds[this.opened]){
  107. pos += dojo.position(this.dds[this.opened]).h;
  108. }
  109. this.node.mmanim = dojo.animateProperty({
  110. node: this.node,
  111. properties: {
  112. marginTop: pos
  113. },
  114. duration: this.interval,
  115. easing: this.easing,
  116. onEnd: dojo.hitch(this,'onEnd')
  117. }).play();
  118. }
  119. this.opened = this.i;
  120. var h = dojo.marginBox(dojo.query('dl.level'+(this.level+1), dd)[0]).h;
  121. dd.wwanim = dojo.animateProperty({
  122. i: i,
  123. node: dd,
  124. properties: {
  125. height: h
  126. },
  127. duration: this.interval,
  128. easing: this.easing,
  129. onEnd: dojo.hitch(this,'onOpenEnd')
  130. }).play();
  131. },
  132.  
  133. close: function(i){
  134. var dt = this.dts[i];
  135. var dd = this.dds[i];
  136. if(dd.wwanim && dd.wwanim.status() == "playing"){
  137. dd.wwanim.stop();
  138. dojo.removeClass(dt, 'opening');
  139. dojo.removeClass(dd, 'opening');
  140. }
  141. dojo.addClass(dt, 'closing');
  142. dojo.addClass(dd, 'closing');
  143.  
  144. if(this.accordionmode == 2){
  145. if(this.node.mmanim && this.node.mmanim.status() == "playing"){
  146. this.node.mmanim.stop();
  147. }
  148. this.node.mmanim = dojo.animateProperty({
  149. node: this.node,
  150. properties: {
  151. marginTop: 0
  152. },
  153. duration: this.interval,
  154. easing: this.easing,
  155. onEnd: dojo.hitch(this,'onEnd')
  156. }).play();
  157. }
#2 15 ноября 2012 в 22:32
как один из вариантов:
  1.  
  2. if $('div.#id').find('div.class') {
  3. ....
  4. //если диву присвоен класс (который с ид)
  5. $('div.#id').removeClass('class').addClass('newclass');
  6. //если диву не присвоен класс (который с ид)
  7. $('div.#id').addClass('newclass');
  8. //ну или сразу меняем свойства для дива через css
  9. $('div.#id').css({"свойство":"значение","свойство2":"значение2",... и т.д.})
  10. .....
  11. }
#3 15 ноября 2012 в 22:42
вот посмотри это меню ставил на многих сайтах, работает отлично
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.