Hiệu ứng mask ảnh cho trình duyệt Webkit bằng CSS3 và jQuery

19/05/2015

Hôm  nay mình sẽ chia sẻ cho các bạn một hiệu ứng ảnh đẹp mắt, rất thích hợp cho việc áp dụng vào các ảnh logo.  Có một nhược điểm là hiệu ứng này chỉ có thể chạy được trên các trình duyệt Webkit (tức là chỉ có trên Chrome và Safari). Tuy nhiên, các bạn sẽ học hỏi được rất nhiều từ bài viết này, vì các bạn sẽ hiểu rõ hơn về cách sử dụng mask (lớp mặt nạ) để tạo hiệu ứng cho ảnh, điều mà trước đây chỉ có thể dùng các phần mềm như Flash để làm.

Hiệu ứng mask ảnh cho trình duyệt Webkit bằng CSS3 và jQuery

Xem Demo | Download

HTML

Đầu tiên, chúng ta xây dựng khung chuẩn html như sau :

<div id="examples">
    <img class="type1" src="images/logo.png" />
    <img class="type2" src="images/logo2.png" />
    <img class="type3" src="images/logo3.png" />
    <img class="type4" src="images/logo4.png" />
</div>

Trong đoạn html bên trên, chúng ta chèn 4 ảnh logo vào để tạo 4 hiệu ứng khác nhau.

CSS

Tùy theo hiệu ứng khác nhau mà các bạn sẽ chọn lựa để áp dụng vào trong trang web của mình. Các bạn chỉ cần copy đoạn css bên dưới.

#examples {
    margin: 50px auto 0;
    overflow: hidden;
    width: 840px;
}
#examples img {
    float: left;
    margin: 10px;
}

.type3 {
    -webkit-mask: url(images/mask.png) no-repeat center center;
}
.type3:hover{
    -webkit-animation: loop_frames 1s ease-in-out infinite;
     -webkit-animation-direction:alternate;
     -webkit-mask-size: auto 100%;
}
@-webkit-keyframes loop_frames {
     0% { -webkit-mask-size: auto 100%; }
     100% { -webkit-mask-size: auto 70%; }
}

.type4 {
    -webkit-transition: -webkit-mask-position 0.5s ease;
    -webkit-mask-size: 400px 300px;
    -webkit-mask-image: -webkit-gradient(linear, left top, right top, color-stop(0.00, rgba(0,0,0,1)), color-stop(0.90, rgba(0,0,0,1)), color-stop(1.00, rgba(0,0,0,0)));
    -webkit-mask-position-x: 400px;
}
.type4:hover {
     -webkit-mask-position-x: 0;
}

jQuery

Và cuối cùng, để hiệu ứng có thể chạy được, các bạn sử dụng đoạn script sau :

$(document).ready(function(){ 

    $('#examples img').hover(function () {
        var $imgObj = $(this);

        // class name
        var sClass = $(this).attr('class');

        // radius
        var iRad = 0;

        // interval
        var iInt;
        if (iInt) window.clearInterval(iInt);

        // loop until end
        iInt = window.setInterval(function() {
            var iWidth = $imgObj.width();
            var iHalfWidth = iWidth / 2;
            var iHalfHeight = $imgObj.height() / 2;

            if (sClass == 'type1') {
                $imgObj.css('-webkit-mask', '-webkit-gradient(radial, '+iHalfWidth+' '+iHalfHeight+', '+ iRad +', '+iHalfWidth+' '+iHalfHeight+', '+ (iRad + 30) +', from(rgb(0, 0, 0)), color-stop(0.5, rgba(0, 0, 0, 0.2)), to(rgb(0, 0, 0)))');
            } else if (sClass == 'type2') {
                $imgObj.css('-webkit-mask', '-webkit-gradient(radial, '+iHalfHeight+' '+iHalfHeight+', '+ iRad +', '+iHalfHeight+' '+iHalfHeight+', '+ (iRad + 30) +', from(rgb(0, 0, 0)), color-stop(0.5, rgba(0, 0, 0, 0.2)), to(rgb(0, 0, 0)))');
            }

            // when radius is more than our width - stop loop
            if (iRad > iWidth) {
                window.clearInterval(iInt);
            }

            iRad+=2;
        }, 10);
    });
});

Thế là xong, các bạn nhớ là hiệu ứng này chỉ áp dụng cho các trình duyệt webkit thôi nhé.

Chúc các bạn thành công !

Chuyên Mục: ,

Bài viết được đăng bởi webmaster

Nếu các bạn thấy bài viết hữu ích thì giúp mình Like cái nhé !