當前為10.0版本文檔,更多實例內容將在最新幫助文檔中展現,點選跳轉至 最新版幫助文檔

JS實現粒子穿梭背景

1. 概述

1.1 預期效果

大屏場景下,給決策報表添加一個酷炫的粒子穿梭背景,效果如下圖所示:

1592266198418337.gif

1.2 實現思路

設置初始化 JS 事件來生成動态背景。

2. 示例

2.1 設計報表

點擊 body 組件,添加初始化後事件,如下圖所示:

121.png

JavaScript 代碼如下:

$("body").prepend('<canvas id="mycanvas" style="position:absolute;z-index:-2; background-color:black;"></canvas>');
var canvas = mycanvas; 
var w = window.innerWidth;
var h = window.innerHeight;
canvas.width = w;
canvas.height = h;
canvas.backgroundColor = "#000";
var ctx = canvas.getContext('2d');
 
function Build({
    this.ctx = ctx;
    this.counts = 3000;  
    this.maxSize = 4;  
    this.halfWidth = w / 2,
        this.halfHeight = h / 2;
    this.arr = [];  
}
Build.prototype.add = function(coor{
    var grd = this.ctx.createRadialGradient(coor.x, coor.y, coor.size / 2, coor.x, coor.y, coor.size);
    grd.addColorStop(0"white");
    grd.addColorStop(1, coor.color);
    this.ctx.fillStyle = grd;
    this.ctx.beginPath();
    this.ctx.arc(coor.x, coor.y, coor.size, 0Math.PI * 2true);
    this.ctx.transform(10010, coor.z);
    this.ctx.closePath();
    this.ctx.fill();
}
Build.prototype.init = function({
    this.run();
    this.render();
    this.animate();
}
Build.prototype.run = function({
    var nums = 0;
    while (nums < this.counts) {
        var coor = {
            x: Math.ceil(Math.random() * w),
            y: Math.ceil(Math.random() * h),
            posx: Math.random() * w - this.halfWidth,
            posy: Math.random() * h - this.halfHeight,
            fl: 100,
            speed: Math.random() * 2,
            posz: Math.random() * 250,
            r: Math.ceil(Math.random() * this.maxSize),
            color: "rgba(" + Math.ceil(Math.random() * 255) + "," + Math.ceil(Math.random() * 255) + "," + Math.ceil(Math.random() * 255) + "," + Math.random() + ")"
        };
        this.arr.push(coor);
        nums++;
    }
}
Build.prototype.clear = function({
    ctx.clearRect(00, w, h);
}
Build.prototype.render = function({
    this.clear();
    for (var item of this.arr) {
        this.draw(item);
    }
}
Build.prototype.animate = function({
        var _this = this;
        this.render(); 
        window.requestAnimationFrame(function({
            _this.animate();
        });
    },
    Build.prototype.draw = function(item{
        if (item.posz > -item.fl) { 
            var scale = item.fl / (item.fl + item.posz); 
            item.x = this.halfWidth + item.posx * scale;
            item.y = this.halfHeight + item.posy * scale;
            item.size = item.r * scale;
            item.posz -= item.speed;
        } else { 
            item.posz = Math.random() * 250;
        }
        this.add(item);
    }
var app = new Build();
app.init();
window.addEventListener('resize'function({
    canvas.width = w = window.innerWidth;
    canvas.height = h = window.innerHeight;
}, false); 
顯示代碼

2.2 效果預覽

保存模板,點擊PC端預覽,效果如 1.1 預期效果 中所示。

3. 模板下載

已完成模板可參見:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\JS\表單JS實例\JS實現粒子穿梭.frm

點擊下載模板:JS實現粒子穿梭.frm

附件列表


主題: 原簡體文檔
  • 有幫助
  • 沒幫助
  • 只是瀏覽

文 檔回 饋

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

反饋已提交

網絡繁忙