2011-10-08 23 views
5

Tôi có Javascript sau để liên tục phát sáng liên kết văn bản. Liên kết này cho thấy một phần khác của cùng một trang vì vậy tôi muốn nó dừng lại khi người dùng đã nhấp vào nó.Hiệu ứng phát sáng/xung Javascript để dừng khi nhấp vào

<script type="text/javascript"> 
    $(document).ready(function() { 
     function pulsate() { 
      $(".pulsate").animate({opacity: 0.2}, 1200, 'linear') 
         .animate({opacity: 1}, 1200, 'linear', pulsate); 
     } 

     pulsate(); 
    }); 
    </script> 

Vì vậy, về cơ bản, tôi chỉ cần biết những gì tôi cần thêm ở đây để hiệu ứng dừng khi nó đã được nhấp.

Nếu cùng một liên kết được nhấp một lần nữa, phần được tiết lộ của trang sẽ ẩn - có quá nhiều rắc rối để làm cho hiệu ứng bắt đầu lại sau lần nhấp thứ hai không?

Tôi rất mong nhận được câu trả lời từ những người bạn tốt.

Scott.

+0

Điều này có vẻ một cách nguy hiểm gần tái tag . Nếu hành động đó quan trọng, bạn có lẽ chỉ cần làm cho nó đơn giản để làm, cắt ra khác, lựa chọn ít quan trọng, hoặc chỉ cần làm điều đó trong nền trước ... – Kzqai

+0

loại giống như có nhưng với một phai - don ' Đừng lo lắng nó trông không giống như một cái méo trên trang với màu phông tinh tế. Tôi chỉ cần nó dừng lại khi nó đã được nhấp vào. – scottk

+0

Heh, miễn là bạn đang sử dụng nó với mục đích và kiểm duyệt, sau đó. : D – Kzqai

Trả lời

7

Chỉ cần liên kết với sự kiện nhấp và gọi stop(). Bạn cũng nên đảm bảo rằng các opacity đã được phục hồi :

$(document).ready(function() { 
    function pulsate() { 
     $(".pulsate").animate({ opacity: 0.2 }, 1200, 'linear') 
        .animate({ opacity: 1 }, 1200, 'linear', pulsate) 
        .click(function() { 
         //Restore opacity to 1 
         $(this).animate({ opacity: 1 }, 1200, 'linear'); 
         //Stop all animations 
         $(this).stop(); 
        }); 
     } 

    pulsate(); 
}); 

Dưới đây là a working jsFiddle.

+2

Tôi không cảm thấy rất thoải mái với cách tiếp cận đó. Đối với mỗi vòng lặp, các phần tử '$ ('. Pulsate')' DOM đang đăng ký một hàm click. Và nếu đã nói 5 yếu tố và chúng lặp lại trong khoảng một phút thì sẽ có ít hơn (5 * 60) chức năng để ngăn chặn nó. –

+0

@TalhaAhmedKhan Khi hàm pulsate được gọi bởi hoạt ảnh, bạn có thể gọi nó bằng một tham số cho biết nó không đăng ký trình xử lý nhấp chuột. –

+0

@TalhaAhmedKhan, nếu bạn có câu trả lời hay hơn, hãy đăng nó. Vui lòng không thay đổi hoàn toàn câu trả lời của tôi (hoặc của bất kỳ ai khác) và thêm dòng "chỉnh sửa theo". –

3

Giải pháp khá đơn giản. Có chức năng pulsate() của bạn đảm bảo rằng .pulsate không có lớp học stop trước khi thực hiện. Nếu nó có lớp đó, thì hàm pulsate() sẽ đơn giản làm động liên kết trở lại độ mờ đục đầy đủ, nhưng không tiếp tục xung.

Ví dụ của James cũng hoạt động, nhưng tôi thích cách tiếp cận của tôi hơn vì cách của anh ấy liên kết sự kiện click với số .pulsate lặp đi lặp lại. Loại điều này có thể gây ra sự cố tùy thuộc vào phần còn lại của trang của bạn.

Sống dụ: http://jsfiddle.net/2f9ZU/

function pulsate() { 
    var pulser = $(".pulsate"); 
    if(!pulser.hasClass('stop')){ 
     pulser.animate({opacity: 0.2}, 1200, 'linear') 
     .animate({opacity: 1}, 1200, 'linear', pulsate); 
    }else{ 
     pulser.animate({opacity:1},1200) 
      .removeClass('stop'); 
    } 
} 

$(document).ready(function() { 
    pulsate(); 
    $('a').click(function(){ 
     $('.pulsate').addClass('stop'); 
    }); 
}); 
Các vấn đề liên quan