jQuery + CSS3 实现水纹效果
水纹效果按钮
水纹效果按钮
水纹效果按钮

js代码如下:

    /**
       jQuery水纹效果插件
       使用方式
            $('.ripple-effect').ripple({
                    speed: 200, // 速度
                    color: '#fff' // 颜色
                }
            });
    */
    $.fn.ripple = function (options) {
        var defaults = {
            speed: 200,
            color: '#000'
        };
        var supportedTouch = true;
        try { ontouchstart; } catch (e) { supportedTouch = false; }
        options = $.extend({}, defaults, options);

        this.each(function () {
            var This = $(this),
                tpl = '<span class="ripple-container"><span class="ripple is-animated"></span></span>';
            This.append(tpl);

            var $r = This.find('.ripple'),
                width = This.width(),
                height = This.height();

            if (supportedTouch) {
                This.on('touchstart', function (e) {
                    var clientX = e.originalEvent.touches[0].clientX,
                        clientY = e.originalEvent.touches[0].clientY;
                    press(clientX, clientY);
                });
                This.on('touchend', release);
            } else {
                This.on('mousedown', function (e) {
                    var clientX = e.clientX || e.pageX,
                        clientY = e.clientY || e.pageY;
                    press(clientX, clientY);
                });
                This.on('mouseup', release);
            }
            function press(clientX, clientY) {
                var radius = Math.pow(width * width + height * height, 0.5) * 2;
                clientX = clientX - This.offset().left;
                clientY = clientY - This.offset().top;

                $r.removeClass('is-animated').addClass('is-visible').css({
                    background: options.color,
                    width: radius + 'px',
                    height: radius + 'px',
                    transform: 'translate(-50%, -50%) translate(' + clientX + 'px,' + clientY + 'px) ' + 'scale(0.0001, 0.0001)',
                    '-webkit-transform': 'translate(-50%, -50%) translate(' + clientX + 'px,' + clientY + 'px) ' + 'scale(0.0001, 0.0001)'
                });

                setTimeout(function () {
                    $r.addClass('is-animated').css({
                        transform: 'translate(-50%, -50%) translate(' + clientX + 'px,' + clientY + 'px)',
                        '-webkit-transform': 'translate(-50%, -50%) translate(' + clientX + 'px,' + clientY + 'px)'
                    });
                }, 10);
            }
            function release() {
                setTimeout(function () {
                    $r.removeClass('is-visible');
                }, options.speed);// 这里控制水纹的速度
            }
        });
    }