[jQuery] Hướng dẫn tạo hiệu ứng Dialog Box đơn giản
Cập nhật lần cuối ngày 05/01/2015 trong Javascript - jQuery
Dialog, Lightbox hay Popup là những thuật ngữ quen thuộc trong Jquery. Nó giúp mở một cửa sổ nhỏ, nổi bật giữa trang web để hiện thông báo hướng dẫn, giới thiệu hay tạo một form lấy thông tin từ người dùng. Những box như vậy tương tác ngay trên trang hiện tại mà không cần mở trang mới, điều này tạo sự thân thiện và thích thú với người xem.
Bài viết này, chúng ta sẽ tạo một box đăng nhập đơn giản, sử dụng HTML, CSS và jQuery.
Demo Source code
HTML
Code html bao gồm 2 thành phần cơ bản:
Tạo một button để khi click vào thì form đăng nhập được show ra:
01 |
<a class="login-window button" href="#login-box">Đăng nhập</a> |
Sau đó là lớp “.login”, chính là form đăng nhập như sau:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 |
<div class="login" id="login-box">Đăng nhập <a class="close" href="#"><img class="img-close" title="Close Window" alt="Close" src="close.png" /></a> <a class="forgot" href="#">Quên mật khẩu?</a></form></div> |
Mã html trên hoàn toàn dễ hiểu, nên mình sẽ không tập trung nhiều.
CSS
01 |
/*phần tử phủ toàn màn hình,không được hiển thị*/ .login .login_title .login-content label { .login-content span { .img-close { |
Xem đoạn css trên, bạn cần chú ý tới 2 thành phần quan trọng:
Phần tử “#over”: là lớp phủ toàn màn hình, bạn ẩn nó bằng cách đặt display: none và để z-index: 999 để nó hiện nổi bật hơn các phần tử nền. Ngoài ra position: fixed để cố định vị trí cho nó đồng thời đặt opacity: 0,8để làm mờ trang.
Thứ 2 là form đăng nhập: lớp “.login” bạn đặt z-index: 99999, lớn hơn phần tử “#mask”, vì nó sẽ nổi bật nhất trên trang web.
Các thuộc tính còn lại, bạn có thể tùy chỉnh theo ý mình sao cho đẹp nhất.
Jquery
Phần quan trong nhất là jquery. Bạn nhớ là load thư viện jquery vào trước nhé
01 |
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> |
Ở đây mình dùng thư viện jquery phiên bản 1.10.2
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
$(document).ready(function() { //cho hiện hộp đăng nhập trong 300ms // thêm phần tử id="over" vào sau body return false; // khi click đóng hộp thoại |
Mã jquery sẽ xử lý 2 sự kiện chính:
Khi click vào nút đăng nhập: $('a.login-window').click(function():
Câu lệnh var loginBox = $(this).attr('href') sẽ lấy thuộc tính href – chính là “#login-box” . Bạn xem lại mã html ta đã có:
<a href="#login-box" class="login-window button">Đăng nhập</a>
Hàm fadeIn(300) sẽ hiện dần hộp đăng nhập trong 300ms. Bạn có thể thay đổi thời gian này và nhớ là đơn vị tính bằng ms. Hoặc cũng có thể dùng fadeIn(“slow”), fadeIn(“fast”) để lớp hiện ra chậm hay nhanh.
Câu lệnh $('body').append('<div id="over"></div>') sẽ thêm vào cuối thẻ body id “#over” mà ta đã style cho nó ở phần CSS. Sau đó là show nó ra thôi.
Sự kiện thứ 2: khi ta click vào nút đóng cửa sổ hoặc click vào lớp phủ nền “#over” thì cửa sổ đăng nhập sẽ đóng lại.
Hãy chú ý câu lệnh $(document).on('click', "a.close, #over", function(){….})
Các bạn sẽ thắc mắc tại sao không dùng $(“a.close, #over”).on(). Bởi vì, phần tử “#over” được thêm vào sau khi tài liệu ( gồm cả mã jquery trên ) được load nên nếu dùng như vậy thì hộp thoại sẽ không bị ảnh hưởng khi ta click vào nền. Do vậy sử dụng $(document).on() là hợp lý. Cái này bạn tự test để kiểm tra và xem thêm về hàmon() tại http://api.jquery.com/on/.
Nhiều bạn có thể sử dụng hàm live() thay cho hàm on(). Tuy nhiên từ phiên bản jquery 1.9 thì hàm live()không được hỗ trợ nữa và nó sẽ không hoạt động.
Hàm fadeOut() là công việc ngược lại hàm fadeIn(), ẩn mờ dần box đăng nhập, còn hàm remove() sẽ loại bỏ phần tử “#over” khỏi tài liệu.
Như vậy là chúng ta đã tạo được một box dialog đơn giản để điền thông tin đăng nhập. Bạn hãy thực hành và tạo những hiệu ứng và style đẹp hơn mà mình thích.
Lời kết
Mình nghĩ rằng không khó để tìm ra những plugin tạo lightbox hay dialog trên mạng. Rất nhiều, tuy nhiên nếu các bạn tự tay xây dựng cho mình một sản phẩm riêng thì vẫn thích thú hơn đúng không? Nhất là những bạn đang bắt đầu với jquery. Hy vọng bài viết sẽ có ích với các bạn. Hãy comment bên dưới nếu bạn cần trao đổi nhé!
0 nhận xét:
Đăng nhận xét