欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js 模擬氣泡屏保效果代碼

 更新時間:2010年07月10日 01:52:40   作者:  
用JavaScript實現(xiàn)的模擬氣泡屏保效果代碼,包括氣泡的碰撞效果,喜歡的朋友可以參考下。
核心代碼:
復制代碼 代碼如下:

var T$ = function(id) { return document.getElementById(id); }
var $extend = function(des, src) { for (var p in src) { des[p] = src[p]} return des; }
var Bubble = function() {
    // 小球隨機樣式
    var clss = ['ball_one', 'ball_two',  'ball_three', 'ball_four', 'ball_five', 'ball_six'];
    var Ball = function(radius, clsname) {
        var ball = document.createElement('div');
        ball.className = clsname;
        with(ball.style) {
            width = height = (radius || 10) + 'px';  position = 'absolute';
        }
        return ball;
    };
    // 屏保主類
    var Screen = function(cid, config) {
        var self = this;
        if (!(self instanceof Screen)) {
            return new Screen(cid, config);
        }
        self.container = T$(cid);
        if (!self.container) return;
        config = $extend(Screen.Config, config || {});
        // 配置屬性
        self.ballsnum = config.ballsnum;
        self.diameter = 55;
        self.radius = self.diameter / 2;
        self.bounce = config.bounce;
        self.spring = config.spring;
        self.gravity = config.gravity;
        self.balls = [];
        self.timer = null;
        // 上下左右邊界
        self.T_bound = 0;
        self.B_bound = self.container.clientHeight;
        self.L_bound = 0;
        self.R_bound = self.container.clientWidth;
    };
    // 靜態(tài)屬性
    Screen.Config = {
        ballsnum: 5,   // 小球數(shù)目
        spring: 0.8,   // 彈力加速度
        bounce: -0.95, // 反彈
        gravity: 0.1   // 重力
    };
    Screen.prototype = {
        initialize: function() {
            var self = this;
            // 生成小球
            self.createBalls();
            // 偵聽碰撞
            self.timer = setInterval(function() {
                self.hitTest();
            }, 32);
        },
        createBalls: function() {
            var self = this, num = self.ballsnum, i = 0;
            var frag = document.createDocumentFragment();
            for (; i < num; i++) {
                var ball = new Ball(self.diameter, clss[Math.floor(Math.random() * (clss.length - 1))]);
                ball.radius = self.radius;
                ball.diameter = self.diameter;
                ball.style.left = (Math.random() * self.B_bound) + 'px';
                ball.style.top = (Math.random() * self.R_bound) + 'px';
                ball.vx = Math.random() * 6 - 3;
                ball.vy = Math.random() * 6 - 3;
                frag.appendChild(ball);
                self.balls[i] = ball;
            }
            self.container.appendChild(frag);
        },
        // 碰撞檢測
        hitTest: function() {
            var self = this, num = self.ballsnum, balls = self.balls;
            for (var i = 0; i < num - 1; i++) {
                var ball0 = balls[i];
                ball0.x = ball0.offsetLeft + ball0.radius;
                ball0.y = ball0.offsetTop + ball0.radius;
                for (var j = i + 1; j < num; j++) {
                    var ball1 = balls[j];
                    ball1.x = ball1.offsetLeft + ball1.radius;
                    ball1.y = ball1.offsetTop + ball1.radius;
                    var dx = ball1.x - ball0.x;
                    var dy = ball1.y - ball0.y;
                    var dist = Math.sqrt(dx * dx + dy * dy);
                    var misDist = ball0.radius + ball1.radius;
                    if (dist < misDist) {
                        var angle = Math.atan2(dy, dx);
                        var tx = ball0.x + Math.cos(angle) * misDist;
                        var ty = ball0.y + Math.sin(angle) * misDist;
                        var ax = (tx - ball1.x) * self.spring;
                        var ay = (ty - ball1.y) * self.spring;
                        ball0.vx -= ax;
                        ball0.vy -= ay;
                        ball1.vx += ax;
                        ball1.vy += ay;
                    }
                }
            }
            for (var i = 0; i < num; i++) {
                self.move(balls[i]);
            }
        },
        // 氣泡運動
        move: function(ball) {
            var self = this;
            ball.vy += self.gravity;
            ball.style.left = (ball.offsetLeft + ball.vx) + 'px';
            ball.style.top = (ball.offsetTop + ball.vy) + 'px';
            // 邊界檢測
            var T = self.T_bound, B = self.B_bound, L = self.L_bound, R = self.R_bound, BC = self.bounce;
            if (ball.offsetLeft + ball.diameter > R) {
                ball.style.left = R - ball.diameter + 'px';
                ball.vx *= BC;
            } else if (ball.offsetLeft < L) {
                ball.style.left = L + 'px';
                ball.vx *= BC;
            }
            if (ball.offsetTop + ball.diameter > B) {
                ball.style.top = B - ball.diameter + 'px';
                ball.vy *= BC;
            } else if (ball.offsetTop < T) {
                ball.style.top = T + 'px';
                ball.vy *= BC;
            }
        }
    };
    return { Screen: Screen }
}();
window.onload = function() {
    var sc = null;
    T$('start').onclick = function() {
        document.getElementById('inner').innerHTML = '';
        sc = Bubble.Screen('inner', { ballsnum: 5, spring: 0.8, bounce: -0.95, gravity: 0.1});
        sc.initialize();
    };
    T$('stop').onclick = function() { clearInterval(sc.timer); }
    var bound = false
    T$('change').onclick = function() {
        if (!bound) {    
            T$('screen').style.backgroundImage = 'url("http://demo.jb51.net/js/bubbling/o_bg1.jpg")';
            bound = true;
        } else {
            T$('screen').style.backgroundImage = 'url("http://demo.jb51.net/js/bubbling/o_bg2.jpg")';
            bound = false;
        }
    }
}

【說明】
程序效率出現(xiàn)了很大瓶頸。需要做的優(yōu)化還有很多。有時間繼續(xù)完善。
另:感謝羅浮宮群友逍遙君武和豪情對圖片的支持。
【源碼下載】
http://www.dbjr.com.cn/jiaoben/28295.html

相關文章

  • Web網(wǎng)頁對話框可拖動、關閉(自動)文字循環(huán)變化

    Web網(wǎng)頁對話框可拖動、關閉(自動)文字循環(huán)變化

    由Js實現(xiàn)的網(wǎng)頁WEB對話框,鼠標可隨意拖動改變位置,類似于有些軟件初次運行時候彈出的每日提示,里面有文字在循環(huán)變化,時間到自動關閉,多么強大的一個web對話框啊,有興趣的朋友可以參考下啊
    2012-12-12
  • js實現(xiàn)花俏的轉動、旋轉之后慢慢張開的窗口特效

    js實現(xiàn)花俏的轉動、旋轉之后慢慢張開的窗口特效

    花俏的轉動的窗口,主要是使用JavaScript代碼實現(xiàn),運行本效果后,窗口不斷旋轉,而后慢慢張開,很炫的效果,看到之后我都目瞪口呆了,真的是很炫,期待喜歡的朋友借鑒參考
    2012-12-12
  • HTML很火的浪漫愛心表白代碼

    HTML很火的浪漫愛心表白代碼

    程序員的你是不是也想送個特別的禮物。今天給大家分享一個HTML+CSS+jQuery實現(xiàn)的情侶浪漫愛心表白JS特效,視覺效果還是相當不錯!得此表白神器,程序猿也可以很浪漫!快去追你的女神吧,把這個告白愛心動畫發(fā)給你心愛的她!
    2023-01-01
  • javascript實現(xiàn)div的拖動并調整大小類似qq空間個性編輯模塊

    javascript實現(xiàn)div的拖動并調整大小類似qq空間個性編輯模塊

    qq空間的個性編輯模塊可以隨意的拖動頁面上的元素并且調動大小實現(xiàn)動態(tài)布局;這種效果的確很酷,那么我們也來實現(xiàn)一個吧
    2012-12-12
  • 一款雙向無縫+按鈕定位的焦點圖實現(xiàn)代碼

    一款雙向無縫+按鈕定位的焦點圖實現(xiàn)代碼

    做這個焦點圖弄了大個晚上,感覺挺暈的~發(fā)上來給大家踩一下吧 雙向無縫的原理很簡單實現(xiàn)起來也不難,主要頭痛的是在前后無縫與按鈕定位之間的配合問題,不過還好現(xiàn)在總算OK了。
    2010-11-11
  • 隨機顯示個性簽名的js代碼(兼容ie,firefox)

    隨機顯示個性簽名的js代碼(兼容ie,firefox)

    隨機顯示個性簽名的js代碼,主要是利用隨機數(shù)。需要的朋友可以參考下。
    2011-04-04
  • html+JavaScript煙花3D簡單特效(親測可用)

    html+JavaScript煙花3D簡單特效(親測可用)

    網(wǎng)頁煙花特效方便使用,更能給養(yǎng)眼享受,復制黏貼就能使用,快來試試吧。這篇文章主要介紹了html+JavaScript煙花3D特效(親測可用),需要的朋友可以參考下
    2023-01-01
  • table 隔列(行)換色效果讓表格結構更清淅

    table 隔列(行)換色效果讓表格結構更清淅

    table 隔列換色效果,很實用的一款網(wǎng)頁特效代碼,用隔行換色來修飾表格,可讓表格結構更清淅,也更加美觀,是一個十分流行的表格特效,在網(wǎng)頁中有利于提高用戶體驗,是一個很不錯的效果,需要的朋友可以參考下
    2012-12-12
  • js 模擬氣泡屏保效果代碼

    js 模擬氣泡屏保效果代碼

    用JavaScript實現(xiàn)的模擬氣泡屏保效果代碼,包括氣泡的碰撞效果,喜歡的朋友可以參考下。
    2010-07-07
  • 百度手寫板代碼JavaScript遠程調用的實現(xiàn)(鼠標輸入法)

    百度手寫板代碼JavaScript遠程調用的實現(xiàn)(鼠標輸入法)

    百度手寫板代碼JavaScript遠程調用的實現(xiàn),其實沒什么可參考的,引用百度的Js文件,如果大家想使用這個類的話,自己下載就行了,正好可參考一下本演示,幫你快速入題。
    2010-09-09

最新評論