首页 > 软件开发 > JQUERY >

Canvas分子式粒子动画特效

来源:互联网 2023-03-16 23:53:57 版权归原作者所有,如有侵权,请联系我们

Canvas分子式粒子动画特效P42办公区 - 实用经验教程分享!

方法/步骤

  • 1

    新建html文档。P42办公区 - 实用经验教程分享!

    Canvas分子式粒子动画特效P42办公区 - 实用经验教程分享!

  • 2

    书写hmtl代码。div id="jsi-particle-container" class="container">Canvas分子式粒子动画特效/div>P42办公区 - 实用经验教程分享!

    Canvas分子式粒子动画特效P42办公区 - 实用经验教程分享!

  • 3

    书写css代码。P42办公区 - 实用经验教程分享!

    style>P42办公区 - 实用经验教程分享!

    html, body { width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden; }P42办公区 - 实用经验教程分享!

    .container { width: 100%; height: 100%; margin: 0; padding: 0; background-color: #000000; }P42办公区 - 实用经验教程分享!

    /style>P42办公区 - 实用经验教程分享!

    Canvas分子式粒子动画特效P42办公区 - 实用经验教程分享!

  • 4

    书写并添加js代码。P42办公区 - 实用经验教程分享!

    script src="js/jquery.min.js">/script>P42办公区 - 实用经验教程分享!

    script>P42办公区 - 实用经验教程分享!

    var RERER = {P42办公区 - 实用经验教程分享!

    BASE_PARTICLE_COUNT :20,P42办公区 - 实用经验教程分享!

    WATCH_INTERVAL : 50,P42办公区 - 实用经验教程分享!

    P42办公区 - 实用经验教程分享!

    init : function(){P42办公区 - 实用经验教程分享!

    this.setParameters();P42办公区 - 实用经验教程分享!

    this.reconstructMethods();P42办公区 - 实用经验教程分享!

    this.setup();P42办公区 - 实用经验教程分享!

    this.bindEvent();P42办公区 - 实用经验教程分享!

    this.render();P42办公区 - 实用经验教程分享!

    },P42办公区 - 实用经验教程分享!

    setParameters : function(){P42办公区 - 实用经验教程分享!

    this.$window = $(window);P42办公区 - 实用经验教程分享!

    this.$container = $('#jsi-particle-container');P42办公区 - 实用经验教程分享!

    this.$canvas = $('canvas />');P42办公区 - 实用经验教程分享!

    this.context = this.$canvas.appendTo(this.$container).get(0).getContext('2d');P42办公区 - 实用经验教程分享!

    this.particles = [];P42办公区 - 实用经验教程分享!

    this.watchIds = [];P42办公区 - 实用经验教程分享!

    this.gravity = {x : 0, y : 0, on : false, radius : 100, gravity : true};P42办公区 - 实用经验教程分享!

    },P42办公区 - 实用经验教程分享!

    setup : function(){P42办公区 - 实用经验教程分享!

    this.particles.length = 0;P42办公区 - 实用经验教程分享!

    this.watchIds.length = 0;P42办公区 - 实用经验教程分享!

    this.width = this.$container.width();P42办公区 - 实用经验教程分享!

    this.height = this.$container.height();P42办公区 - 实用经验教程分享!

    this.$canvas.attr({width : this.width, height : this.height});P42办公区 - 实用经验教程分享!

    this.distance = Math.sqrt(Math.pow(this.width / 2, 2) Math.pow(this.height / 2, 2));P42办公区 - 实用经验教程分享!

    this.createParticles();P42办公区 - 实用经验教程分享!

    },P42办公区 - 实用经验教程分享!

    reconstructMethods : function(){P42办公区 - 实用经验教程分享!

    this.watchWindowSize = this.watchWindowSize.bind(this);P42办公区 - 实用经验教程分享!

    this.jdugeToStopResize = this.jdugeToStopResize.bind(this);P42办公区 - 实用经验教程分享!

    this.render = this.render.bind(this);P42办公区 - 实用经验教程分享!

    },P42办公区 - 实用经验教程分享!

    createParticles : function(){P42办公区 - 实用经验教程分享!

    for(var i = 0, count = (this.BASE_PARTICLE_COUNT * this.width / 500 * this.height / 500) | 0; i count; i ){P42办公区 - 实用经验教程分享!

    this.particles.push(new PARTICLE(this));P42办公区 - 实用经验教程分享!

    }P42办公区 - 实用经验教程分享!

    },P42办公区 - 实用经验教程分享!

    watchWindowSize : function(){P42办公区 - 实用经验教程分享!

    this.clearTimer();P42办公区 - 实用经验教程分享!

    this.tmpWidth = this.$window.width();P42办公区 - 实用经验教程分享!

    this.tmpHeight = this.$window.height();P42办公区 - 实用经验教程分享!

    this.watchIds.push(setTimeout(this.jdugeToStopResize, this.WATCH_INTERVAL));P42办公区 - 实用经验教程分享!

    },P42办公区 - 实用经验教程分享!

    clearTimer : function(){P42办公区 - 实用经验教程分享!

    while(this.watchIds.length > 0){P42办公区 - 实用经验教程分享!

    clearTimeout(this.watchIds.pop());P42办公区 - 实用经验教程分享!

    }P42办公区 - 实用经验教程分享!

    },P42办公区 - 实用经验教程分享!

    jdugeToStopResize : function(){P42办公区 - 实用经验教程分享!

    var width = this.$window.width(),P42办公区 - 实用经验教程分享!

    height = this.$window.height(),P42办公区 - 实用经验教程分享!

    stopped = (width == this.tmpWidth && height == this.tmpHeight);P42办公区 - 实用经验教程分享!

    P42办公区 - 实用经验教程分享!

    this.tmpWidth = width;P42办公区 - 实用经验教程分享!

    this.tmpHeight = height;P42办公区 - 实用经验教程分享!

    P42办公区 - 实用经验教程分享!

    if(stopped){P42办公区 - 实用经验教程分享!

    this.setup();P42办公区 - 实用经验教程分享!

    }P42办公区 - 实用经验教程分享!

    },P42办公区 - 实用经验教程分享!

    bindEvent : function(){P42办公区 - 实用经验教程分享!

    this.$window.on('resize', this.watchWindowSize);P42办公区 - 实用经验教程分享!

    this.$container.on('mousemove', this.controlForce.bind(this, true));P42办公区 - 实用经验教程分享!

    this.$container.on('mouseleave', this.controlForce.bind(this, false));P42办公区 - 实用经验教程分享!

    },P42办公区 - 实用经验教程分享!

    controlForce : function(on, event){P42办公区 - 实用经验教程分享!

    this.gravity.on = on;P42办公区 - 实用经验教程分享!

    P42办公区 - 实用经验教程分享!

    if(!on){P42办公区 - 实用经验教程分享!

    return;P42办公区 - 实用经验教程分享!

    }P42办公区 - 实用经验教程分享!

    var offset = this.$container.offset();P42办公区 - 实用经验教程分享!

    this.gravity.x = event.clientX - offset.left this.$window.scrollLeft();P42办公区 - 实用经验教程分享!

    this.gravity.y = event.clientY - offset.top this.$window.scrollTop();P42办公区 - 实用经验教程分享!

    },P42办公区 - 实用经验教程分享!

    render : function(){P42办公区 - 实用经验教程分享!

    requestAnimationFrame(this.render);P42办公区 - 实用经验教程分享!

    P42办公区 - 实用经验教程分享!

    var context = this.context;P42办公区 - 实用经验教程分享!

    context.save();P42办公区 - 实用经验教程分享!

    context.fillStyle = 'hsla(0, 0%, 0%, 0.3)';P42办公区 - 实用经验教程分享!

    context.fillRect(0, 0, this.width, this.height);P42办公区 - 实用经验教程分享!

    context.globalCompositeOperation = 'lighter';P42办公区 - 实用经验教程分享!

    P42办公区 - 实用经验教程分享!

    for(var i = 0, particles = this.particles, gravity = this.gravity, count = particles.length; i count; i ){P42办公区 - 实用经验教程分享!

    var particle = particles[i];P42办公区 - 实用经验教程分享!

    P42办公区 - 实用经验教程分享!

    for(var j = i 1; j count; j ){P42办公区 - 实用经验教程分享!

    particle.checkForce(context, particles[j]);P42办公区 - 实用经验教程分享!

    }P42办公区 - 实用经验教程分享!

    particle.checkForce(context, gravity);P42办公区 - 实用经验教程分享!

    particle.render(context);P42办公区 - 实用经验教程分享!

    }P42办公区 - 实用经验教程分享!

    context.restore();P42办公区 - 实用经验教程分享!

    }P42办公区 - 实用经验教程分享!

    };P42办公区 - 实用经验教程分享!

    var PARTICLE = function(renderer){P42办公区 - 实用经验教程分享!

    this.renderer = renderer;P42办公区 - 实用经验教程分享!

    this.init();P42办公区 - 实用经验教程分享!

    };P42办公区 - 实用经验教程分享!

    PARTICLE.prototype = {P42办公区 - 实用经验教程分享!

    THRESHOLD : 100,P42办公区 - 实用经验教程分享!

    SPRING_AMOUNT : 0.001,P42办公区 - 实用经验教程分享!

    LIMIT_RATE : 0.2,P42办公区 - 实用经验教程分享!

    GRAVIY_MAGINIFICATION : 10,P42办公区 - 实用经验教程分享!

    P42办公区 - 实用经验教程分享!

    init : function(){P42办公区 - 实用经验教程分享!

    this.radius = this.getRandomValue(5, 15);P42办公区 - 实用经验教程分享!

    this.x = this.getRandomValue(-this.renderer.width * this.LIMIT_RATE, this.renderer.width * (1 this.LIMIT_RATE)) | 0;P42办公区 - 实用经验教程分享!

    this.y = this.getRandomValue(-this.renderer.width * this.LIMIT_RATE, this.renderer.height * (1 this.LIMIT_RATE)) | 0;P42办公区 - 实用经验教程分享!

    this.vx = this.getRandomValue(-3, 3);P42办公区 - 实用经验教程分享!

    this.vy = this.getRandomValue(-3, 3);P42办公区 - 实用经验教程分享!

    this.ax = 0;P42办公区 - 实用经验教程分享!

    this.ay = 0;P42办公区 - 实用经验教程分享!

    this.gravity = false;P42办公区 - 实用经验教程分享!

    this.transformShape();P42办公区 - 实用经验教程分享!

    },P42办公区 - 实用经验教程分享!

    getRandomValue : function(min, max){P42办公区 - 实用经验教程分享!

    return min (max - min) * Math.random();P42办公区 - 实用经验教程分享!

    },P42办公区 - 实用经验教程分享!

    transformShape : function(){P42办公区 - 实用经验教程分享!

    var velocity = Math.sqrt(this.vx * this.vx this.vy * this.vy);P42办公区 - 实用经验教程分享!

    this.scale = 1 - velocity / 15;P42办公区 - 实用经验教程分享!

    this.hue = ((180 velocity * 10) % 360) | 0;P42办公区 - 实用经验教程分享!

    },P42办公区 - 实用经验教程分享!

    checkForce : function(context, particle){P42办公区 - 实用经验教程分享!

    if(particle.gravity && !particle.on){P42办公区 - 实用经验教程分享!

    return;P42办公区 - 实用经验教程分享!

    }P42办公区 - 实用经验教程分享!

    var dx = particle.x - this.x,P42办公区 - 实用经验教程分享!

    dy = particle.y - this.y,P42办公区 - 实用经验教程分享!

    distance = Math.sqrt(dx * dx dy * dy),P42办公区 - 实用经验教程分享!

    magnification = (particle.gravity ? this.GRAVIY_MAGINIFICATION : 1);P42办公区 - 实用经验教程分享!

    P42办公区 - 实用经验教程分享!

    if(distance > this.THRESHOLD * magnification){P42办公区 - 实用经验教程分享!

    return;P42办公区 - 实用经验教程分享!

    }P42办公区 - 实用经验教程分享!

    var rate = this.SPRING_AMOUNT / magnification / (this.radius particle.radius);P42办公区 - 实用经验教程分享!

    this.ax = dx * rate * particle.radius;P42办公区 - 实用经验教程分享!

    this.ay = dy * rate * particle.radius;P42办公区 - 实用经验教程分享!

    P42办公区 - 实用经验教程分享!

    if(!particle.gravity){P42办公区 - 实用经验教程分享!

    particle.ax = -dx * rate * this.radius;P42办公区 - 实用经验教程分享!

    particle.ay = -dy * rate * this.radius;P42办公区 - 实用经验教程分享!

    }P42办公区 - 实用经验教程分享!

    if(distance > this.THRESHOLD){P42办公区 - 实用经验教程分享!

    return;P42办公区 - 实用经验教程分享!

    }P42办公区 - 实用经验教程分享!

    context.lineWidth = 3;P42办公区 - 实用经验教程分享!

    context.strokeStyle = 'hsla(' this.hue ', 70%, 30%, ' (Math.abs(this.THRESHOLD - distance) / this.THRESHOLD) ')';P42办公区 - 实用经验教程分享!

    context.beginPath();P42办公区 - 实用经验教程分享!

    context.moveTo(this.x, this.y);P42办公区 - 实用经验教程分享!

    context.lineTo(particle.x, particle.y);P42办公区 - 实用经验教程分享!

    context.stroke();P42办公区 - 实用经验教程分享!

    },P42办公区 - 实用经验教程分享!

    render : function(context){P42办公区 - 实用经验教程分享!

    context.save();P42办公区 - 实用经验教程分享!

    context.fillStyle = 'hsl(' this.hue ', 70%, 40%)';P42办公区 - 实用经验教程分享!

    context.translate(this.x, this.y);P42办公区 - 实用经验教程分享!

    context.rotate(Math.atan2(this.vy, this.vx) Math.PI / 2);P42办公区 - 实用经验教程分享!

    context.scale(this.scale, 1);P42办公区 - 实用经验教程分享!

    context.beginPath();P42办公区 - 实用经验教程分享!

    context.arc(0, 0, this.radius, 0, Math.PI * 2, false);P42办公区 - 实用经验教程分享!

    context.fill();P42办公区 - 实用经验教程分享!

    context.restore();P42办公区 - 实用经验教程分享!

    P42办公区 - 实用经验教程分享!

    this.x = this.vx;P42办公区 - 实用经验教程分享!

    this.y = this.vy;P42办公区 - 实用经验教程分享!

    this.vx = this.ax;P42办公区 - 实用经验教程分享!

    this.vy = this.ay;P42办公区 - 实用经验教程分享!

    P42办公区 - 实用经验教程分享!

    if(this.x -this.radius && this.vx 0 || (this.x > this.renderer.width this.radius) && this.vx > 0 || this.y -this.radius && this.vy 0 || (this.y > this.renderer.height this.radius) && this.vy > 0){P42办公区 - 实用经验教程分享!

    var theta = this.getRandomValue(0, Math.PI * 2),P42办公区 - 实用经验教程分享!

    sin = Math.sin(theta),P42办公区 - 实用经验教程分享!

    cos = Math.cos(theta),P42办公区 - 实用经验教程分享!

    velocity = this.getRandomValue(-3, 3);P42办公区 - 实用经验教程分享!

    P42办公区 - 实用经验教程分享!

    this.x = -(this.renderer.distance this.radius) * cos this.renderer.width / 2;P42办公区 - 实用经验教程分享!

    this.y = -(this.renderer.distance this.radius) * sin this.renderer.height / 2;P42办公区 - 实用经验教程分享!

    this.vx = velocity * cos;P42办公区 - 实用经验教程分享!

    this.vy = velocity * sin;P42办公区 - 实用经验教程分享!

    }P42办公区 - 实用经验教程分享!

    this.transformShape();P42办公区 - 实用经验教程分享!

    }P42办公区 - 实用经验教程分享!

    };P42办公区 - 实用经验教程分享!

    $(function(){P42办公区 - 实用经验教程分享!

    RERER.init();P42办公区 - 实用经验教程分享!

    });P42办公区 - 实用经验教程分享!

    /script>P42办公区 - 实用经验教程分享!

    Canvas分子式粒子动画特效P42办公区 - 实用经验教程分享!

  • 5

    代码整体结构。P42办公区 - 实用经验教程分享!

    Canvas分子式粒子动画特效P42办公区 - 实用经验教程分享!

  • 5
  • 6

    查看效果。P42办公区 - 实用经验教程分享!

    Canvas分子式粒子动画特效P42办公区 - 实用经验教程分享!

  • 以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!P42办公区 - 实用经验教程分享!


    标签: JQUERY

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号