2012-03-16 24 views
5

Tôi có chức năng thử nghiệm dưới đây hoạt động tốt để làm mờ một phần tử vào hoặc ra.Hoạt hình mờ dần | jQuery vs js tinh khiết | setInterval vs. setTimeout

Tôi có thể đạt được gì khi sử dụng JQuery?

Cảm ơn

Effects.prototype.fade = function(direction, max_time, element) 
{ 
    var elapsed = 0; 
    function next() { 
     elapsed += 10; 
     if (direction === 'up') 
     { 
      element.style.opacity = elapsed/max_time; 
     } 
     else if (direction === 'down') 
     { 
      element.style.opacity = (max_time - elapsed)/max_time; 
     } 
     if (elapsed <= max_time) { 
      setTimeout(next, 10); 
     } 
    } 
    next(); 
}; 

Chạy một tìm kiếm trên fadeIn() trên các thư viện lõi jquery tôi nhận được một hit ở đây:

jQuery.each({ 
    slideDown: genFx("show", 1), 
    slideUp: genFx("hide", 1), 
    slideToggle: genFx("toggle", 1), 
    fadeIn: { opacity: "show" }, 
    fadeOut: { opacity: "hide" }, 
    fadeToggle: { opacity: "toggle" } 
}, function(name, props) { 
    jQuery.fn[ name ] = function(speed, easing, callback) { 
     return this.animate(props, speed, easing, callback); 
    }; 
}); 

Sử dụng JQuery Source Viewer

function (prop, speed, easing, callback) { 
    var optall = jQuery.speed(speed, easing, callback); 
    if (jQuery.isEmptyObject(prop)) { 
     return this.each(optall.complete, [false]); 
    } 
    prop = jQuery.extend({}, 
    prop); 
    return this[optall.queue === false ? "each" : "queue"](function() { 
     if (optall.queue === false) { 
      jQuery._mark(this); 
     } 
     var opt = jQuery.extend({}, 
     optall), 
      isElement = this.nodeType === 1, 
      hidden = isElement && jQuery(this).is(":hidden"), 
      name, val, p, display, e, parts, start, end, unit; 
     opt.animatedProperties = {}; 
     for (p in prop) { 
      name = jQuery.camelCase(p); 
      if (p !== name) { 
       prop[name] = prop[p]; 
       delete prop[p]; 
      } 
      val = prop[name]; 
      if (jQuery.isArray(val)) { 
       opt.animatedProperties[name] = val[1]; 
       val = prop[name] = val[0]; 
      } else { 
       opt.animatedProperties[name] = opt.specialEasing && opt.specialEasing[name] || opt.easing || "swing"; 
      } 
      if (val === "hide" && hidden || val === "show" && !hidden) { 
       return opt.complete.call(this); 
      } 
      if (isElement && (name === "height" || name === "width")) { 
       opt.overflow = [this.style.overflow, this.style.overflowX, this.style.overflowY]; 
       if (jQuery.css(this, "display") === "inline" && jQuery.css(this, "float") === "none") { 
        if (!jQuery.support.inlineBlockNeedsLayout) { 
         this.style.display = "inline-block"; 
        } else { 
         display = defaultDisplay(this.nodeName); 
         if (display === "inline") { 
          this.style.display = "inline-block"; 
         } else { 
          this.style.display = "inline"; 
          this.style.zoom = 1; 
         } 
        } 
       } 
      } 
     } 
     if (opt.overflow != null) { 
      this.style.overflow = "hidden"; 
     } 
     for (p in prop) { 
      e = new jQuery.fx(this, opt, p); 
      val = prop[p]; 
      if (rfxtypes.test(val)) { 
       e[val === "toggle" ? hidden ? "show" : "hide" : val](); 
      } else { 
       parts = rfxnum.exec(val); 
       start = e.cur(); 
       if (parts) { 
        end = parseFloat(parts[2]); 
        unit = parts[3] || (jQuery.cssNumber[p] ? "" : "px"); 
        if (unit !== "px") { 
         jQuery.style(this, p, (end || 1) + unit); 
         start = (end || 1)/e.cur() * start; 
         jQuery.style(this, p, start + unit); 
        } 
        if (parts[1]) { 
         end = (parts[1] === "-=" ? -1 : 1) * end + start; 
        } 
        e.custom(start, end, unit); 
       } else { 
        e.custom(start, val, ""); 
       } 
      } 
     } 
     return true; 
    }); 
} 
+9

1. Bạn không cần phải viết nó. 2. Bạn không cần phải viết nó. 3. Bạn không cần phải ... tốt :) Hãy xem xét rằng "viết nó" cũng ngụ ý "kế toán cho trình duyệt quirks". Nó cũng độc đáo phù hợp với phần còn lại của mô hình hiệu ứng jQuery cho chuỗi,… –

+0

Chỉ cần tải về mã nguồn phát triển jQuery và trích xuất hàm fadeIn. jQuery's fadeIn làm một cái gì đó tương tự như chức năng của bạn nhưng nó thực hiện tốt hơn dưới tải, cố gắng giữ cho thời gian hạn chế. Ngoài ra, toàn bộ thư viện animate được thiết kế khá tốt và các công cụ chỉ hoạt động. – Halcyon

+0

từ những gì tôi quan sát trước đây, jQuery sử dụng bộ tính giờ (setTimeout) để gọi đệ quy hàm. theo cách đó, giao diện người dùng của bạn sẽ không bị khóa trong khi chuyển đổi. – Joseph

Trả lời

6

Thông thường, bạn don không bao gồm một thư viện như jQuery chỉ cho một hiệu ứng duy nhất, nhưng như một tổng quát purpo thư viện se để đơn giản hóa những thứ như các cuộc gọi DOM manipulation, AJAX, hãy đặt CSS thuộc tính theo cách đó là trình duyệt chéo, ngoài việc áp dụng effects (chẳng hạn như .fadeIn/.fadeOut) và otherapplications.

Về mặt lý thuyết, bạn không nên thêm jQuery chỉ cho một cuộc gọi đơn giản. Nhưng lý do của tôi là bạn có thể sẽ khai thác ngày càng nhiều tính năng của nó trong thời gian dài, vì vậy tôi không thấy một lý do thực sự nào để không sử dụng nó.

Về chủ đề thực hiện các chức năng fadeIn hoặc fadeOut của riêng bạn, bạn có thể xem jQuery source và trích xuất các phương pháp đó hoặc thực hiện triển khai của riêng bạn từ đầu. Nhưng với thực tế là jQuery đã thực hiện phương pháp này, tôi không thấy lý do tại sao bạn muốn sao chép nó, khác với mục đích giáo dục.

+0

Bạn không thể trích xuất từ ​​jQuery - xem mã nguồn ở trên và số nhánh của nó ... nó không phải là mô-đun. –

+0

tốt, bạn có thể lấy ý tưởng từ nó. – bevacqua

5

Lý do lớn nhất để sử dụng JQuery trên mã tùy chỉnh của bạn, theo ý kiến ​​của tôi, là bạn không phải duy trì mã cho nhiều trình duyệt và nhiều phiên bản. JQuery thực hiện tốt công việc xử lý các quirks của các trình duyệt chính cho bạn.

Ngoài ra, có nhiều cách sử dụng tuyệt vời khác cho JQuery mà bạn có thể muốn sử dụng sau này.

Về mã, khi bạn tải xuống JQuery: http://docs.jquery.com/Downloading_jQuery bạn có thể tải xuống phiên bản không nén, có thể đọc được.

Tôi không biết cách đơn giản nào để chỉ lấy các hàm đó ra khỏi JQuery. Tại sao không sử dụng thư viện đầy đủ?

Các vấn đề liên quan