亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

jQuery 動態云標簽插件

2019-11-20 13:56:16
字體:
來源:轉載
供稿:網友

前言:

  最近對js的插件封裝特別感興趣,無耐就目前的技術想做到js的完全封裝,還是有一定困難,就基于jQuery封裝了一個小的插件,而且是基于對象級開發的,不是添加全局方法。高深的語法幾乎沒有,就有一個return:foreach()方法來返回對象實例本身,還有一個extend()函數,用來擴展參數對象的屬性,這也是為了對象在調完我這個方法后方便鏈式操作。

  插件打包下載地址:點我下載

插件名:動態云標簽

插件特點:

在指定塊級元素內動態生成a標簽
a標簽的高度、寬度、位置、層數、背景顏色隨機可控
a標簽漸隱顯示和漸隱消失,可改變初始化的透明度
a標簽創建的速度和移動速度可控(計時器)
a標簽移動的步長可控制(每次循環移動的距離)
鼠標懸浮停止動畫且透明度最大,層數最高,鼠標離開,恢復之前狀態
遇到問題:

  目前插件是可以正常運行,但如果切換瀏覽器標簽,不把插件頁顯示,過一會再切換回來,會有卡頓的現象,這個現在還不知道什么情況,請了解的給予指點,里面也有很多需要優化的地方,有好的點子希望提出來,我好及時給予更正。

動畫效果:

汗:gif圖片可能有點大,稍等會就動了。耐心哦

 

 JS代碼片段:

復制代碼 代碼如下:

(function($){
    $.fn.activiTag = function(opts) {
        opts = $.extend({
            move_step:2,    // 元素移動步長--px
            move_speed:40,    // 元素移動速度--ms
            init_speed:1000,// 元素創建速度--ms
            min_opacity:0,    // 元素最低透明度--0-1小數
            max_grain: 10,    // 最大粒度
            // a標簽數組
            a_List: ["<a href='#'>請添加元素哦</a>","<a href='#'>Spring Jpa詳解</a>","<a href='#'>javamail郵箱</a>"],    // a標簽字符串數組
            // 背景顏色數組
            color_List: ['#CD2626','#8b4513','#696969','#ff8c00','#6495ED']    // 標簽顏色數組
        },opts||{});
       
        var aTag = $(this); // 當前容器對象
        var T_width = aTag.width(), T_height = aTag.height(); // 容器高度、寬度
       
        return this.each(function(){
           
            function setATagCss() {    // 設置容器相應css
                aTag.css({position:'relative',overflow:'hidden'});
            }
          
            function getRandomNum(Min, Max){ // 獲取兩個區間之內隨機數
                Min = new Number(Min);Max = new Number(Max);
                var Range = Max - Min + 1;
                var Rand = Math.random();
                return Min + Math.floor(Rand * Range);
            }
           
            function getRandomXY(num) {    // 隨機返回一個 正/負參數
                num = new Number(num);   
                if(Math.random()<=0.5)
                num = -num;
                return num;
            }
           
            /**
             * 隨機創建a標簽,寬度為容器寬度的三分之一,然后在自身基礎上+-五分之一寬度
             * 高度自身寬度的三分之一,然后+-三分之一
             */
            function createATag() {
                var i = getRandomNum(0,opts.a_List.length-1);
                var a = $(opts.a_List[i]);    // 每個標簽元素
                aTag.append(a);
                return a;
            }
           
            /** 設置a標簽css樣式 **/
            function setCss(a) {
                var w = Math.ceil(T_width/3) + getRandomXY(T_width/60);
                var h = Math.ceil(w/3) + getRandomXY(w/36); // 行高
                var zIndex = Math.ceil(Math.random()*400);    // 層數
                var rdmOpcy = getRandomNum(new Number(opts.min_opacity),0);
                // 行高、層數、透明度
                a.css({
                    opacity:rdmOpcy,
                    zIndex: zIndex,
                    lineHeight:h+'px',
                    position: 'absolute',
                    textDecoration:'none',
                    textAlign:'center',
                    borderRadius: '3px',
                    color:'#FFFFFF',
                    whiteSpace: 'nowrap',
                });
                return a;
            }
           
            /** 計算標簽相對于容器的初始化位置(X_Y 坐標) **/
            function setXY(a) {
                var x = getRandomNum(0,(T_width-a.width()));
                var y = getRandomNum(0,T_height/10);
                a.css({left:x+'px', bottom:y+'px'});
                return a;
            }
           
            /** 設置隨機背景顏色 **/
            function setColor(a) {
                var i = Math.ceil(Math.random()*opts.color_List.length -1);
                a.css({backgroundColor:opts.color_List[i]})
            }
           
            /** 構造函數入口 **/
            function construct() {
                var a = createATag();
                setCss(a);    // css
                setColor(a); // color
                setXY(a);    // 坐標位置
                return a;
            }
           
            /** 動畫定時器函數 **/
            function interVal(a,s_opcy,botm,n,space,s) {
                var opcy = a.css('opacity');  // 透明度
                var botm_ = a.css('bottom').replace('px',''); // 實時底部距離
                var opcy_ = parseFloat(new Number(a.css('opacity'))) + s_opcy;  // ++透明度
                var _opcy_ = parseFloat(new Number(a.css('opacity'))) - s_opcy; // --透明度
                var fall = botm_ - botm;  // 已移動的距離
                botm_ = new Number(botm_) + new Number(opts.move_step);
                a.css({
                    display: 'block',
                    bottom: botm_,
                });
               
                if(fall < n)
                { a.css({opacity: opcy_}) }
                else if(2*n < fall)
                { a.css({opacity: _opcy_}) }
                   
                if (botm_ >= space)
                {
                    clearInterval(s);
                    a.remove();
                }
            }
           
            function init() {
                if(aTag.children('a').length >= new Number(opts.max_grain))
                return;
                var a = construct();
                var opcy = a.css('opacity');  // 透明度
                var zInx = a.css('zIndex');      // 層數
                var botm = a.css('bottom').replace('px',''); // 初始到底部距離
                var space = T_height - a.height() - a.css('bottom').replace('px','');  // 要移動的距離
               
                var n = space/3;    // 變換透明度距離
                var step = 1-opcy;    // 要變化透明度值
                var sec = n/opts.move_step*opts.move_speed/1000; // 距離/單步長 * 單步長秒數 = 需要秒數
                var s_opcy = opts.move_speed/1000/sec * step;  // 每次循環需要變換的透明度值
                var speed_ = getRandomNum(new Number(opts.move_speed)-30,new Number(opts.move_speed)+30);
                var currOpcy;    // 記錄鼠標移入時透明度
//                console.log(opts.move_speed+'....'+speed_)
                /** 元素移動循環 **/
                var s = setInterval(function(){
                    interVal(a,s_opcy,botm,n,space,s);
                }, speed_)
               
                a.mouseover(function(){    // 鼠標移入
                    currOpcy = a.css('opacity');
                    clearInterval(s);
                    $(this).css({
                        zIndex: 401,
                        opacity: 1
                    });
                });
               
                a.mouseout(function(){ // 鼠標移出
                    $(this).css({
                        zIndex: zInx,
                        opacity: currOpcy
                    });
                    s= setInterval(function(){
                        interVal(a,s_opcy,botm,n,space,s);
                    },speed_);
                });
            }
            setATagCss();
            setInterval(init,opts.init_speed);
        });
    }
})(jQuery)

HTML:

復制代碼 代碼如下:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲免费小视频| 97在线视频免费看| 欧美成人全部免费| 国产欧美一区二区三区视频| 色av中文字幕一区| 国产噜噜噜噜久久久久久久久| 日韩av免费观影| 亚洲第一视频网| 2019中文字幕在线| 国产噜噜噜噜久久久久久久久| 激情懂色av一区av二区av| 亚洲精品456在线播放狼人| 狠狠躁夜夜躁人人爽超碰91| 精品视频在线观看日韩| 一区二区欧美在线| 日韩有码片在线观看| 91高清在线免费观看| 国产精品男女猛烈高潮激情| 神马国产精品影院av| 亚洲精品国产精品自产a区红杏吧| 亚洲最新视频在线| 亚洲男人的天堂在线播放| 久久亚洲精品网站| 日本精品久久久久影院| 亚洲精品av在线| 国产午夜精品视频免费不卡69堂| 国产剧情日韩欧美| 久久伊人色综合| 久久这里只有精品99| 中文字幕亚洲一区| 久久中文字幕视频| 最近2019年中文视频免费在线观看| 爽爽爽爽爽爽爽成人免费观看| 欧美午夜xxx| 久久视频中文字幕| 91av视频在线播放| 日韩精品视频在线播放| 亚洲成人av片在线观看| 久久99亚洲精品| 国产美女久久精品香蕉69| 国产999精品久久久| 亚洲美女精品久久| 国产精品久久久久久一区二区| 国产精品99久久久久久久久久久久| 国产亚洲免费的视频看| 国产精品成人国产乱一区| 夜夜嗨av一区二区三区四区| 中文字幕久久久av一区| 久久久久久久久综合| 久久免费少妇高潮久久精品99| 日韩精品在线观看一区| 久久精品99久久香蕉国产色戒| 综合网日日天干夜夜久久| 成人精品一区二区三区电影免费| 国产精品丝袜久久久久久不卡| 国产欧美在线视频| 一本色道久久综合亚洲精品小说| 97人人爽人人喊人人模波多| 中文国产成人精品久久一| 国产精品精品久久久久久| 日韩精品中文字幕久久臀| 精品国产乱码久久久久酒店| 在线观看欧美日韩| 欧美精品午夜视频| 色噜噜狠狠色综合网图区| 在线视频国产日韩| 欧美激情第三页| 欧美资源在线观看| 欧美成人久久久| 欧美最顶级的aⅴ艳星| 亚洲综合日韩在线| 在线观看国产成人av片| 国产女人18毛片水18精品| 国产精品免费久久久久久| 97超碰国产精品女人人人爽| 日韩电影免费在线观看中文字幕| 精品一区二区三区四区| 国产综合视频在线观看| 亚洲性猛交xxxxwww| 亚洲电影中文字幕| 国产成人精品视频在线| 精品日韩美女的视频高清| 国外日韩电影在线观看| 亚洲欧洲日产国码av系列天堂| 国产精品黄视频| 2019中文字幕全在线观看| 亚洲国产精品人久久电影| 欧美激情国产日韩精品一区18| 久久久久久高潮国产精品视| 久久视频在线免费观看| 这里只有精品在线播放| 欧美性黄网官网| 亚洲字幕在线观看| 国产精品久久久久久久久久久久久久| 国产亚洲日本欧美韩国| 亚洲人在线观看| 91精品国产色综合久久不卡98口| 中文字幕亚洲欧美在线| 国产精品情侣自拍| 精品亚洲永久免费精品| 久久国产精品久久国产精品| 欧美巨猛xxxx猛交黑人97人| 日本久久久久久| 久久久国产精品一区| 欧美精品在线免费播放| 欧美亚洲国产视频小说| 这里只有视频精品| 国产精品欧美日韩| 色噜噜狠狠狠综合曰曰曰88av| 欧美怡春院一区二区三区| 国产成人精品综合久久久| 亚洲国产精品电影在线观看| 国产美女精品视频免费观看| 中文字幕九色91在线| 久久久久久久久久久av| 中文字幕亚洲欧美日韩高清| 精品少妇一区二区30p| 欧美日韩亚洲一区二区| 国产精品久久婷婷六月丁香| 538国产精品视频一区二区| 亚洲欧洲激情在线| 福利一区视频在线观看| 国产精品美女免费看| 亚洲最大福利网站| 亚洲视频网站在线观看| 亚洲成人av中文字幕| 国产视频亚洲视频| 成人做爰www免费看视频网站| www国产精品视频| 97久久精品人人澡人人爽缅北| 精品国产乱码久久久久久虫虫漫画| 亚洲国产精品一区二区三区| 欧美交受高潮1| 欧美一二三视频| 91久久精品在线| 亚洲一区二区久久久久久久| 国产精品美女免费| 国产黑人绿帽在线第一区| 欧美理论片在线观看| 日韩欧美aaa| 久久久午夜视频| 91精品久久久久久久久不口人| 日韩高清电影免费观看完整| 久久久伊人日本| 欧美中文在线观看国产| 久久伊人91精品综合网站| 日韩中文在线观看| 欧美色欧美亚洲高清在线视频| 一区二区三区国产视频| 国产精品黄色影片导航在线观看| 亚洲xxxx妇黄裸体| 日韩中文字幕精品视频| 成人欧美一区二区三区在线| 蜜臀久久99精品久久久久久宅男| 精品久久久久久中文字幕大豆网| 欧美激情性做爰免费视频| 在线观看欧美成人| 国产视频综合在线| 亚洲japanese制服美女| 亚洲精品动漫100p| 久久久久亚洲精品| 亚洲精品videossex少妇| 国产精品久久一区主播| 国产精品69久久久久|