2015-09-27 14 views
7

Tôi nhìn quanh đây và tìm thấy một giải pháp, nhưng tôi đã tự hỏi nếu có một cách để viết mã đơn giản hơn. Về cơ bản những gì tôi tạo ra là một fade đơn giản trong, mờ dần hiệu ứng di chuột cho một hình ảnh.Làm thế nào để làm cho mouseenter, mouseleave chuyển đổi trong một chức năng

$(document).on('mouseenter','.photos div',function() { 
    "use strict"; 
    $(this).find('img.nocolor').stop().animate({ 'opacity': '0' }, 800); 
}); 

$(document).on('mouseleave','.photos div',function() { 
    "use strict"; 
    $(this).find('img.nocolor').stop().animate({ 'opacity': '1' }, 800); 
}); 

Tôi biết bạn có thể đặt con chuột, cùng với nhau nhưng tôi không biết cách cấu trúc chức năng chuyển đổi như thế. Vui lòng cho tôi biết cách đơn giản hóa điều này.

+0

'" sử dụng nghiêm ngặt ";' là thứ bạn viết một lần ở đầu tệp JS - không phải trong mọi hàm duy nhất ... Và nếu bạn muốn xử lý hai sự kiện này với một hàm gọi lại thì có thể bạn sẽ muốn cách để biết sự kiện nào nằm trong hàm gọi lại. Vì vậy, hãy xem xét các thuộc tính của đối tượng sự kiện (và làm cho hàm của bạn lấy nó làm tham số đầu tiên.) – CBroe

+1

Hoàn toàn hợp pháp để xác định 'sử dụng strict' ở mức hàm nếu bạn không muốn nó áp dụng ở nơi khác. – duncanhall

Trả lời

5

Có lý do nào bạn muốn đạt được hiệu ứng này với Javacscript không? Bạn có thể đạt được chính xác những gì bạn đang sau với CSS tinh khiết:

#an-image { 
    opacity: 0.2; 
    transition: opacity 0.8s linear; 
} 

#an-image:hover { 
    opacity: 1; 
    transition: opacity 0.8s linear; 
} 

Bạn có thể thấy một ví dụ làm việc ở đây: http://jsfiddle.net/oqqx1z3k/

Bạn có thể xem this example để xem nó kết hợp với ví dụ bạn đưa ra.

+0

Tôi thích ý tưởng sử dụng css thẳng nhưng trong trường hợp của tôi có một hình ảnh mờ dần ở trên cùng của hình ảnh khác. Vì vậy, đó là hai hình ảnh cả hai vị trí tuyệt đối bên trong của cùng một div. – riotgear

+0

Điều đó không có vẻ như có bất kỳ lý do gì khiến CSS không hoạt động. Nếu bạn tin là có, hãy đăng câu hỏi khác mô tả vấn đề thực sự. – duncanhall

+0

Tôi đang thêm một mẫu fiddle vào những gì tôi đang cố gắng đạt được. http://jsfiddle.net/galnova/36uzbndo/29/ – riotgear

0
$('.photos div').hover(
    function() { 
    // MOUSE ENTER 
    $(this).find('img.nocolor').stop().animate({ 'opacity': '0' }, 800); 
    }, function() { 
    // MOUSE LEAVE 
    $(this).find('img.nocolor').stop().animate({ 'opacity': '1' }, 800); 
    } 
); 

EDIT: selector để ràng buộc chức năng không ghi lại, đó là '.photos div'

+0

Cần phải suy nghĩ lại 'hover' trên 'tài liệu' ...chỉ có thời gian chuột sẽ để lại là trong thanh công cụ trình duyệt hoặc để lại cửa sổ trình duyệt – charlietfl

+0

@charlietfl bạn đúng, tôi chỉ chỉnh sửa bộ chọn :) –

+0

vấn đề sẽ là OP có khả năng ủy quyền sự kiện để giải thích các yếu tố trong tương lai không tồn tại – charlietfl

1

Bạn có thể phân biệt bằng event.type

$(document).on('mouseenter mouseleave','.photos div',function (evt) { 
    "use strict"; 
    var opacity = evt.type === 'mouseenter' ? 0 : 1; 
    $(this).find('img.nocolor').stop().animate({ 'opacity': opacity }, 800); 
}); 

Ngoài ra phương pháp fadeTo() là giống như phim hoạt hình bạn đang sử dụng

$(document).on('mouseenter mouseleave','.photos div',function (evt) { 
    "use strict"; 
    var opacity = evt.type === 'mouseenter' ? 0 : 1; 
    $(this).find('img.nocolor').stop().fadeTo(800, opacity); 
}); 
0

Bạn có thể sử dụng event.type để đạt được điều này với một chức năng chuyển đổi đơn như sau:

function toggleAnimation(eventName) 
 
{ 
 
    "use strict"; 
 
    
 
    $(document).find('img.nocolor').stop().animate({ 'opacity': 
 
      (eventName == 'mouseenter') ? '0' : '1' }, 800); 
 
} 
 

 

 
$(document).ready(function(){ 
 

 
    $(document).on('mouseenter mouseleave','.photos div',function (event) { 
 
    toggleAnimation(event.type); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div class="photos"> 
 
    <div> 
 
<img width="300px" src="http://www.lb.undp.org/content/dam/lebanon/img/AboutLebanon/Lebanon.png" class="nocolor" /> 
 
    </div> 
 
</div>

+0

Cảm ơn bạn rất nhiều vì đã đơn giản hóa điều này cho tôi. Đôi khi tôi làm việc ngược lại và không thấy một thứ đơn giản như thế nào! – riotgear

+1

Bạn được chào đón anh chàng – KAD

3

tôi đã không kiểm tra này nhưng tôi tin rằng bạn có thể sử dụng .fadetoggle() chức năng mà sẽ làm những gì bạn muốn.

$('.photos div').on('mouseenter mouseleave',function() { 

    $(this).find('img.nocolor').togglefade('slow'); 
}); 

hoặc

$('.photos div').on({ 
    mouseenter: function() { 
     $(this).find('img.nocolor').stop().animate({ 'opacity': '0' }, 800); 
    }, 
    mouseleave: function() { 
     $(this).find('img.nocolor').stop().animate({ 'opacity': '1' }, 800); 
    } 
}) 

Tuy nhiên tôi không phải là một fan hâm mộ của làm việc với chuyển đổi và MouseEnter và MouseLeave đơn giản chỉ vì những chức năng làm việc dựa trên di chuyển chuột và không vị trí dựa trên tài liệu html.

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