jquery创建一个图片、视频缓冲的效果样式插件

利用css和jquery创建一个动画效果的缓冲样式插件,插件可以开始、暂停、结束.

 

(function($) {
    $.fn.scrollWait = function(options) {
        var ops = $.extend({}, $.fn.scrollWait.defaults, options);
        var opts = $.meta ? $.extend({}, ops, $(this).data()) : ops;
        /**
         * 显示位置
         */
        var win = $(window);
        var winheight = win.height();
        var winwidth = win.width();
        var dsize = opts.size;
        var top = opts.top;
        var left = opts.left;
        var dtop = !top && top != "" && typeof top != "undefined" && top != 0
                ? (winheight - dsize) / 2
                : top;
        var dleft = !left && left != "" && typeof left != "undefined"
                && left != 0 ? (winwidth - dsize) / 2 : left;
        // 原点数量
        var num = opts.num;
        // 原点直径
        var R = dsize / num * opts.areaWeight;
        // 半径
        var r = 1 / 2 * R;
        // 外侧圆直径
        var outerR = 1 / 2 * dsize;
        // 内侧圆直径
        var innerR = outerR - R;
        // 遍历添加原点对象
        for (var i = 0; i < num; i++) {
            $('body').append($("<div class=\"innerCircle\" id=\"innerCircle"
                    + i + "\"></div>"));
        }
        // 其实坐标0,0
        var i = 0;
        var innerArray = new Array(num);
        /**
         * 计算内圆上个点的中心坐标
         */
        for (var j = 0; j < innerArray.length; j++) {
            var x, y;
            var ang = i * 360 / num;
            if (0 <= ang && ang <= 90) {
                x = outerR * Math.sin(ang / 180 * Math.PI) + outerR;
                y = outerR - outerR * Math.cos(ang / 180 * Math.PI);
            }
            if (90 < ang && ang <= 180) {
                x = outerR * Math.cos((ang - 90) / 180 * Math.PI) + outerR;
                y = outerR * Math.sin((ang - 90) / 180 * Math.PI) + outerR;
            }
            if (180 < ang && ang <= 270) {
                x = outerR - outerR * Math.sin((ang - 180) / 180 * Math.PI);
                y = outerR * Math.cos((ang - 180) / 180 * Math.PI) + outerR;
            }
            if (270 < ang && ang <= 360) {
                x = outerR - outerR * Math.cos((ang - 270) / 180 * Math.PI);
                y = outerR - outerR * Math.sin((ang - 270) / 180 * Math.PI);
            }
            innerArray[j] = new Array(dtop + y - r, dleft + x - r);
            i++;
        }
        /**
         * 画圆
         */
        $(".innerCircle").each(function() {
            $(this).css({
                'width' : R + "px",
                'height' : R + "px",
                'border-top-left-radius' : r + "px",
                'border-top-right-radius' : r + "px",
                'border-bottom-left-radius' : r + "px",
                'border-bottom-right-radius' : r + "px"
            });
        });
        for (var i = 0; i < num; i++) {
            $("#innerCircle" + i).css({
                'top' : innerArray[i][0] + "px",
                'left' : innerArray[i][1] + "px"
            });
        }
        // 查找当前暂停的圆的位置
        var val = $("#current").val();
        if (val == undefined || val == "") {
            $("body").append($("<input type=\"hidden\" id=\"current\">"));
            k = 0;
        } else {
            k = val;
        }
        var o = new Object();
        var timer;
        // 开始旋转
        o.start = function() {
            var first;
            var g = $("#grade").val();
            if (g == undefined || g == "") {
                $("body").append($("<input type=\"hidden\" id=\"grade\">"));
                first = 1;
            } else {
                first = g;
            }
            timer = setInterval(function() {
                if (first % 2 == 1) {
                    $("#innerCircle" + k).removeClass("innerCircle")
                            .addClass("innerCircle-change");
                }
                if (first % 2 == 0) {
                    $("#innerCircle" + k).removeClass("innerCircle-change")
                            .addClass("innerCircle");
                }
                if (k == (num - 1)) {
                    k = 0;
                    console.log(first);
                    first++;
                    $("#grade").val(first);
                } else {
                    k++;
                }
                // 覆盖值
                $("#current").val(k);
            }, opts.speed);
            return this;
        }
        // 暂停
        o.stop = function() {
            clearInterval(timer);
            return this;
        }
        // 结束
        o.end = function() {
            clearInterval(timer);
            // 移除所有元素
            $(".innerCircle,.innerCircle-change,#current,#grade").remove();
        }
        return o;
    }
    $.fn.scrollWait.defaults = {
        size : 80,
        top : null,
        left : null,
        // 数量
        num : 8,
        speed : 200,
        // 圆点占整个面积的比重
        areaWeight : 5 / 4
    };

})(jQuery);

 

调用方法:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>MyHtml.html</title>

        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">

        <link rel="stylesheet" type="text/css"
            href="scroll-wait-jquery-plugin.css">

    </head>
    <script type="text/javascript" src="jquery-1.7.js"></script>
    <script type="text/javascript" src="scroll-wait-jquery-plugin.js"></script>
    <script type="text/javascript">
        $(document).ready(function(){
        var w=$("body").scrollWait();
        w.start();
        
        setTimeout(function() {w.stop();},1000);
            setTimeout(function() {w.start();},2000);
            setTimeout(function() {w.stop();},3000);
            setTimeout(function() {w.start();},4000);
            setTimeout(function() {w.stop();},5000);
            setTimeout(function() {w.start();},6000);
            setTimeout(function() {w.end();},7000);
        });
    </script>
    <body>


    </body>
</html>

css:

 

.innerCircle {
	position: absolute;
	background: #FFFF00;
	opacity: 0.8;
}

.innerCircle-change {
	background: #333;
	position: absolute;
}

  

demo:

(怎么提供在线的demo观看?)

 

 

 

转载于:https://www.cnblogs.com/tatame/archive/2012/08/28/2660410.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值