سؤال

مرحبا جميعا لدي جميلة على التوالي إلى الأمام وظيفة

enableModule : function(moduleName){
        var module = $('div#'+moduleName);
        console.log('enabling '+moduleName);
        console.time('animate');
        module.animate({'opacity' : '1.0'}, 300, function(){console.timeEnd('animate');});
        module.find('.disabled_sheild').remove();
        module.removeClass('disabled');
        console.log('end of enable Module');
    }

الرسوم المتحركة النفس, التعتيم تغيير, هو سريع جدا ولكن هناك مثل التأخر في استدعاء ذلك.وحدة التحكم.الوقت() عن أوقات 2540MS أكبر.أنا أفكر أنه قد يكون بسبب div#وحدة يجري الرسوم المتحركة جنبا إلى جنب مع الأطفال ؟ ولكن هذا dosent معنى لأن لدي وظيفة أخرى "disableModule" الذي يفعل الشيء نفسه في الاتجاه المعاكس و يعمل بسرعة معقولة.

هنا هو تعطيل وظيفة الوحدة ، إلى حد كبير أكثر يحدث ولكن يعود مرة من حوالي 242ms

disableModule : function(moduleName){
      $('div#'+moduleName+', div.'+moduleName).each(function(){
        var module = $(this);
        module.prepend('<div class="disabled_sheild"></div>');
        var sheild = module.find('.disabled_sheild');
        sheild.css({'position' : 'absolute', 'z-index' : '200'});
        sheild.width(module.width());
        sheild.height(module.height());
        jQuery.each(jQuery.browser, function(i) {
            if($.browser.msie){
               //module.css("display","none");
               //if using ie give sheild a transparent background layout
            }else{
              console.time('animate');
              module.animate({'opacity' : '0.5'}, function(){ console.timeEnd('animate');});
            }
          });
      });
    }
هل كانت مفيدة؟

المحلول

وبعد بعض المشاكل شاقة ط تعقب ذلك وصولا الى كونها قضية مع حلقة الكشف عن متصفح في طريقة تعطيل:

  jQuery.each(jQuery.browser, function(i) {
      if($.browser.msie){
         //module.css("display","none");
         //if using ie give sheild a transparent background layout
      }else{
        console.time('animate');
        module.animate({opacity : 0.5}, 200, function(){console.timeEnd('animate');});
      }
    });

وتعليقا هذه الكتلة من جلب كل ما يصل الى سرعة. أنا سحبت تقريبا شعري بعد محاولة لتحسين كل شيء آخر.

نصائح أخرى

هل حاولت ببساطة إعادة أوردنج لهم ؟

module.find('.disabled_sheild').remove();
module.removeClass('disabled');
module.animate({'opacity' : '1.0'}, 300, function(){console.timeEnd('animate');});

الرسوم المتحركة يحدث بشكل غير متزامن ، find و remove أساليب يمكن أن تستهلك موارد (خاصة منذ find يمشي شجرة DOM) التي يمكن أن تستخدم إلا في الرسوم المتحركة.

أيضا, منذ كنت حيوي خلق "تعطيل درع" في disable الطريقة يمكن حفظ تشغيله

module.data("disabledShield", module.prepend('<div class="disabled_sheild"></div>'));

ومجرد استخدام هذا المرجع في enable طريقة لتجنب دوم الأقدام

module.data("disabledShield").remove();
module.removeClass('disabled');
module.animate({'opacity' : '1.0'}, 300, function(){console.timeEnd('animate');});

(انظر http://docs.jquery.com/Internals/jQuery.data على الطبيب $.data)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top