Tạo thumbnail scroll đơn giản với jQuery

Đăng bởi Neo trong mục Hướng dẫn vào 20 tháng 10, 2010 | Comments

Bài hướng dẫn tạo thumbnail scroll với jQuery sẽ giúp bạn hiểu thêm một số kỹ thuật làm việc với jQuery như: cách lấy chiều rộng của phần tử (.width(), .outerWidth()), đếm số phần tử (size()) và cách lấy vị trí của phần tử (.offset(), .offsetLeft). Nếu bạn đang theo dõi loạt bài Tạo slideshow đơn giản với jQuery thì ở phần 3, tôi sẽ gắn thumbnail này vào slideshow.

Mã HTML và CSS

Chúng ta bắt đầu thumbnail scroll với mã HTML như sau:

<div id="thumbs-wrapper">
  <div id="thumbs-container">
    <img src="img/1.jpg" width="120" />
    <img src="img/2.jpg" width="120" />
    <img src="img/3.jpg" width="120" />
    <img src="img/4.jpg" width="120" />
    <img src="img/5.jpg" width="120" />
    <img src="img/6.jpg" width="120" />
    <img src="img/7.jpg" width="120" />
    <img src="img/8.jpg" width="120" />
  </div>
</div>

Bạn có thể thấy mã HTML ở đây rất đơn giản, và mã CSS cũng như vậy:

#thumbs-wrapper {
	background: #000;
  width: 980px;
	height: 120px;
	overflow: hidden;
	margin: 300px auto
}

#thumbs-container {
	overflow: hidden
}

#thumbs-container img {
	margin: 0;
	padding: 0;
	border: none;
	float: left;
	padding: 0 1px
}

#thumbs-wrapper có thuộc tính overflow: hidden sẽ giúp cho #thumbs-container (dài hơn 980px) không bị tràn ra ngoài. Thuộc tính overflow: hidden ở #thumb-container sẽ giúp sửa lỗi float của img

Mã javascript

Trước tiên là hàm giúp bạn thực hiện việc scroll (tôi giải thích từng bước ngay bên trong mã javascript):

//Hàm thực hiện việc scroll
function makeScroll($wrapper, $container){
  //Lấy chiều rộng của wrapper
  var divWidth = $wrapper.width();
  //Tìm ảnh cuối cùng trong container
  var lastIMG = $container.find('img:last-child');
  //Xác định vị trí từ bên trái tới mép phải của ảnh cuối cùng
  var conWidth = lastIMG[0].offsetLeft + lastIMG.outerWidth();
  $wrapper.scrollLeft(0);
  
  //Khi có sự kiện chuyển động chuột ở trong wrapper
  $wrapper.unbind('mousemove').bind('mousemove',function(e){
    //Tính toán vị trí bên trái chuột để scroll
    var left = (e.pageX - $wrapper.offset().left) * (conWidth-divWidth) / divWidth;
    $wrapper.scrollLeft(left);
  });
}

Bạn có thể lấy chiều rộng của một phần tử bằng .width() hoặc .outerWidth(). Điểm khác nhau giữa 2 phương thức này là outerWidth sẽ tính chiều rộng của phần tử có padding và border.

scrollLeft là phương thức ít được dùng, nó giúp bạn thay đổi vị trí của thanh scroll ngang trên màn hình (bạn có thể thay mã css của #thumbs-wrapper thành overflow: auto; để thấy rõ hơn). Ở bài hướng dẫn thì tôi đã ẩn thanh scroll đi và sử dụng jQuery tính toán vị trí của chuột để scroll.

Cuối cùng là việc gọi hàm và các tính toán khác:

$(document).ready(function(){
	var $wrapper = $('#thumbs-wrapper');
	var $container = $('#thumbs-container');
	// Đếm số img
	var $totalimg = $('#thumbs-container img').size();
	// Lấy chiều rộng của img
	var $imgwidth = $('#thumbs-container img:first-child').outerWidth();
	//console.log($imgwidth);
	// Đặt chiều rộng cho thumbs-container
	var containerwidth = $totalimg * $imgwidth;
	$container.width(containerwidth + 'px');

	// Gọi hàm makeScroll
	makeScroll($wrapper, $container);
});

Phương thức .size() cho bạn biết tổng số thẻ img có trong #thumbs-container (để tính toán chiều rộng của #thumbs-container). Giả sử tất cả các ảnh có chiều rộng là như nhau, ta lấy chiều rộng của 1 ảnh và nhân lên với tổng số ảnh. Việc cuối cùng là gọi hàm scoll lên và xem demo ở trình duyệt

Bạn có thích bài viết này?

Neo's picture

Neo

Nhìn mặt trời từ năm 1984 nhưng tới tận 2002 mới được thấy cái máy tính đầu tiên của mình. Đầu năm 2007 thì quyết định theo cái nghề cao quý là thiết kế web Big Grin. Hiện mình đang sống tại Hà Nội. Sở thích: làm website và giúp đỡ mọi người phát triển website theo chiều hướng tốt đẹp hơn.

Trang chủ - Twitter