2012-08-09 34 views
5

Trước hết, các khối jQuery Transit. Nếu bạn không nhìn thấy nó, hãy kiểm tra http://ricostacruz.com/jquery.transit/ và ngạc nhiên!hoạt ảnh chuyển tiếp jquery và .stop() fx queue

Một vấn đề là mặc dù trong khi nó tuyên bố sử dụng hàng đợi hiệu ứng của jQuery, và dường như đối với hầu hết các phần, tôi không thể có được phương pháp .stop() của jQuery để làm việc với nó.

tôi đã đăng một fiddle đây: http://jsfiddle.net/nicholasstephan/sTpa7/

Nếu bạn nhấp vào nút animate, một tiêu chuẩn jQuery .animate() được sử dụng để từ từ di chuyển các hộp bên phải. Dừng dừng lại, như bạn mong đợi, dừng hoạt ảnh. Việc khôi phục cài đặt cũng sẽ dừng hoạt ảnh và đặt hộp trở lại vị trí bắt đầu.

Nếu bạn bấm chuyển tiếp, cần thực hiện chính xác những điều tương tự ... nhưng nó không ...

gì đang xảy ra ở đây? Bất cứ ai biết một workaround cho điều này?

Cảm ơn.

+0

Tôi đang tìm giải pháp cho cùng một vấn đề. Bạn đã thử mã trong: https://github.com/rstacruz/jquery.transit/issues/18? –

+0

Tôi chưa thử điều đó. Nice tìm. Tôi đang đi với việc sử dụng một animate cũ jQuery cho hoạt hình của tôi mà cần phải được dừng lại cho bây giờ, nhưng tôi chắc chắn sẽ xem xét điều đó. – nicholas

Trả lời

4

Đây là giải pháp có thể hoạt động.

thử Tạo một hàm chuyển tiếp mới xếp hàng một cuộc gọi lại bổ sung. Cuộc gọi lại này có thể dọn dẹp sau khi hoạt ảnh được khử nhiễu bằng dừng. Hướng dẫn rõ ràng và bỏ qua Tuy nhiên không nhận được từ chức năng dừng cũ. Nhưng chúng ta có thể tạo ra một chức năng dừng mới cho điều đó. Đây chỉ là gõ vào trình duyệt và hoàn toàn chưa được kiểm tra

(function($){ 
    $.fn.stopableTransition = function (...){ 
     var skip = false 
     var clear = false 
     this.handle("stopTransition", function(doclear, doskip){ 
      skip = doskip; clear = doclear; 
     }) 
     this.transition(...) 
     this.queue(function(){ 
      if(skip){ 
       //todo: ensure animation is removed from css 
       //todo: move object to where the animation would have finished 
      } 
      else 
      { 
       //todo: ensure animation is removed from css 
       //todo: make sure object stays at its current position 
      } 

      if(clear){ 
       skip = false 
       clear = false 
       $(this).clearQueue() 
      } 
      else 
      { 
       skip = false 
       clear = false 
       $(this).dequeue() 
      } 

     }) 
    } 
    $.fn.stopTransition = function (clear, skip){ 
     clear = (typeof(clear) === 'undefined') ? false : clear; 
     skip = (typeof(skip) === 'undefined') ? false : skip; 
     this.triggerHandler("stopTransition", [clear, skip]) 
     this.dequeue(); 
    } 
})(jQuery) 
+0

4 upvotes, vì vậy đã có ai thử nghiệm nó? – mu3

0

Như @ Jason More nói, tôi ngẩng đầu lên trong thread đó và tôi phát hiện ra rằng một fork tồn tại và có một hàm có tên transitionStop() (và đối với thanh toán bù trừ tất cả còn lại bạn cũng nên gọi clearQueue()), nhưng xem xét thực tế là ngã ba này có cam kết cuối cùng khoảng một năm trước, và TransitJS ban đầu có cam kết cuối cùng khoảng 3 tháng trước, có thể bạn sẽ thiếu một số tính năng sử dụng ngã ba đó.
Nhưng đối với những gì tôi cần, đó là cách nhanh nhất.

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