2009-05-19 59 views
9

Có cách nào, sử dụng Jquery để phát triển và sau đó thu nhỏ hình ảnh (với hoạt ảnh để trông mượt mà) khi di chuột mà không ảnh hưởng đến bố cục quá nhiều (tôi cho rằng phần đệm sẽ co lại và sau đó tăng lên).Có cách nào để phát triển/thu nhỏ hình ảnh khi di chuột bằng Jquery không?


Với một chút lộn xộn, tôi cuối cùng đã đưa ra giải pháp, nhờ tất cả những người đã giúp đỡ.

<html> 
<head> 
<style type="text/css"> 
    .growImage {position:relative;width:80%;left:15px;top:15px} 
    .growDiv { left: 100px; top: 100px;width:150px;height:150px;position:relative } 
</style> 

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 

</head> 
<body> 
<div class="growDiv"> 
     <img class="growImage" src="image.jpg" alt="my image"> 
</div> 

<script type="text/javascript"> 

$(document).ready(function(){ 

    $('.growImage').mouseover(function(){ 
     //moving the div left a bit is completely optional 
     //but should have the effect of growing the image from the middle. 
     $(this).stop().animate({"width": "100%","left":"0px","top":"0px"}, 400,'swing'); 
    }).mouseout(function(){ 
     $(this).stop().animate({"width": "80%","left":"15px","top":"15px"}, 200,'swing'); 
    });; 
}); 
</script> 
</body></html> 

Trả lời

13

Nếu bạn có hình ảnh của bạn vị trí hoàn toàn vào tài liệu trong CSS, phần còn lại của bố cục trang không nên thay đổi khi bạn làm động hình ảnh của bạn .

Bạn sẽ có thể sử dụng chức năng animate() của jQuery. Mã này sẽ giống như thế này:

$("#yourImage").hover(
    function(){$(this).animate({width: 400px, height:400px}, 1000);},   
    function(){$(this).animate({width: 200px, height:200px}, 1000);} 
); 

Ví dụ này sẽ phát triển hình ảnh với id = yourImage đến 400px rộng và cao khi chuột di qua, và đưa nó trở lại 200px rộng và cao khi di chuột kết thúc. Điều đó nói rằng, vấn đề của bạn nằm nhiều hơn trong HTML/CSS hơn jQuery.

+0

bạn quên thêm dấu ngoặc kép. điều này phải là "chiều rộng" và "400px", v.v. –

1

Bạn không thể sử dụng jQuery animate để triển khai điều đó? Với một chút mày mò, nó sẽ là một snap.

9

Các phát triển và thu hẹp hoạt động dễ dàng với .animate:

$("#imgId").click(function(){ 
    $(this).animate({ 
    width: newWidth, 
    height: newHeight 
    }, 3000); 
}); 

Vấn đề là làm thế nào để làm điều này mà không thay đổi cách bố trí của trang của bạn. Một cách để làm điều này là với một bản sao được định vị hoàn toàn trên nội dung. Khác có thể là để hoàn toàn vị trí hình ảnh bên trong một div kích thước cố định tương đối - mặc dù IE có thể có vấn đề với điều đó.

Đây là một thư viện hiện điều đó dường như làm những gì bạn đang yêu cầu http://justinfarmer.com/?p=14

+3

liên kết là chết. – mmdanziger

1

Nếu bạn thực sự muốn nói "không ảnh hưởng đến bố cục", bạn cần tập trung nhiều hơn vào CSS hơn là trên javascript.

JavaScript không được yêu cầu đã được đăng ở đây ... nhưng để đảm bảo bố cục của bạn không bị hư hỏng, bạn cần phải xóa hình ảnh của mình khỏi luồng của bố cục.

Điều này có thể được thực hiện bằng cách định vị nó hoàn toàn và đặt chỉ mục z thành giá trị lớn hơn. Tuy nhiên, đây không phải luôn là giải pháp sạch nhất ... vì vậy tôi khuyên bạn nên chơi xung quanh với "vị trí: tương đối" trong phần tử DOM mẹ và "vị trí: tuyệt đối" theo kiểu của hình ảnh.

Sự tương tác giữa tương đối và tuyệt đối khá thú vị. Bạn nên google nó lên.

cổ vũ, jrh

4

Bạn có thể quấn hình ảnh trong một div (hoặc bất kỳ yếu tố html bạn nghĩ là thích hợp, li vv) với nó tràn thiết lập để ẩn. Sau đó, sử dụng jQuery .animate để phát triển div đó theo bất kỳ cách nào bạn muốn.

Vì vậy, ví dụ như html có thể

<div class="grower"> 
    <img src="myimg.jpg" width="300" height="300" alt="my image"> 
</div> 

Sau đó bạn css sẽ trông như thế

.grower {width:250px;height:250px;overflow:hidden;position:relative;} 

Vì vậy, hình ảnh của bạn được về cơ bản crop trên div, mà sau đó bạn có thể phát triển trên bất kỳ sự kiện nào để tiết lộ kích thước đầy đủ của hình ảnh bằng cách sử dụng jQuery

$('.grower').mouseover(function(){ 
    //moving the div left a bit is completely optional 
    //but should have the effect of growing the image from the middle. 
    $(this).stop().animate({"width": "300px","left":"-25px"}, 200,'easeInQuint'); 
}).mouseout(function(){ 
    $(this).stop().animate({"width": "250px","left":"0px"}, 200,'easeInQuint'); 
});; 

NB: Bạn có thể muốn thêm vào css bổ sung vào js của bạn, giống như một tăng z-index để div của bạn để nó có thể phát triển theo cách bố trí vv

+0

Điều này là gần, nhưng nó cắt hình ảnh thay vì thay đổi kích thước nó. –

2

Muốn gửi một giải pháp đơn giản tôi đang sử dụng dựa trên bài đăng và thông tin này từ Fox's answer cho một câu hỏi có liên quan.

Sử dụng một <img> như thế này: <img style="position: absolute;" class="resize" />

Bạn có thể làm điều gì đó tương tự như những gì bên dưới. Nó sẽ lấy chiều rộng + chiều cao hiện tại của hình ảnh, làm cho nó lớn gấp 3 lần khi di chuột (current * 3) và sau đó đưa nó trở lại.

var current_h = null; 
var current_w = null; 

$('.resize').hover(
    function(){ 
     current_h = $(this, 'img')[0].height; 
     current_w = $(this, 'img')[0].width; 
     $(this).animate({width: (current_w * 3), height: (current_h * 3)}, 300); 
    }, 
    function(){ 
     $(this).animate({width: current_w + 'px', height: current_h + 'px'}, 300); 
    } 
); 

Các current_X biến là toàn cầu để họ có thể truy cập vào các hành động chuột-out.

+0

Mặc dù đây chỉ là một phương pháp đơn giản. Nếu người dùng di chuyển chuột nhanh chóng trở lại và chuyển tiếp qua hình ảnh, hình ảnh sẽ tiếp tục mở rộng. Bạn sẽ cần phải đặt lại kích thước hoàn toàn trên 'mouseout'. – Navigatron

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