首页 > 软件开发 > HTML >

html5 canvas一群鸟飞行特效

来源:互联网 2023-03-16 19:11:08 298

html5 canvas一群鸟飞行特效2fE办公区 - 实用经验教程分享!

工具/原料

  • adobe dreamweaver

方法/步骤

  • 1

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

    html5 canvas一群鸟飞行特效2fE办公区 - 实用经验教程分享!

  • 2

    书写hmtl代码。2fE办公区 - 实用经验教程分享!

    canvas>/canvas>2fE办公区 - 实用经验教程分享!

    div>html5 canvas一群鸟飞行特效,只支持高版本浏览/div>2fE办公区 - 实用经验教程分享!

    html5 canvas一群鸟飞行特效2fE办公区 - 实用经验教程分享!

  • 3

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

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

    html, body { margin: 0; background: #000; }2fE办公区 - 实用经验教程分享!

    canvas { display: block; }2fE办公区 - 实用经验教程分享!

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

    html5 canvas一群鸟飞行特效2fE办公区 - 实用经验教程分享!

  • 3相关内容未经许可获取自百度经验
  • 4

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

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

    var Birds = function()2fE办公区 - 实用经验教程分享!

    {2fE办公区 - 实用经验教程分享!

    var me = this;2fE办公区 - 实用经验教程分享!

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

    var config = {2fE办公区 - 实用经验教程分享!

    number : 1002fE办公区 - 实用经验教程分享!

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

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

    var width;2fE办公区 - 实用经验教程分享!

    var height;2fE办公区 - 实用经验教程分享!

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

    var canvas;2fE办公区 - 实用经验教程分享!

    var engine;2fE办公区 - 实用经验教程分享!

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

    var birds;2fE办公区 - 实用经验教程分享!

    var frame = 0;2fE办公区 - 实用经验教程分享!

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

    var speed = 0.4;2fE办公区 - 实用经验教程分享!

    var birdLineCount = 10;2fE办公区 - 实用经验教程分享!

    var birdLineIndex = -1;2fE办公区 - 实用经验教程分享!

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

    var bgTop;2fE办公区 - 实用经验教程分享!

    var bgBot;2fE办公区 - 实用经验教程分享!

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

    var z = {2fE办公区 - 实用经验教程分享!

    current : 1,2fE办公区 - 实用经验教程分享!

    target : 12fE办公区 - 实用经验教程分享!

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

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

    var mouse = {2fE办公区 - 实用经验教程分享!

    x : 0.5,2fE办公区 - 实用经验教程分享!

    y : 0.5,2fE办公区 - 实用经验教程分享!

    z : 0.52fE办公区 - 实用经验教程分享!

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

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

    var prepare = function()2fE办公区 - 实用经验教程分享!

    {2fE办公区 - 实用经验教程分享!

    canvas = document.getElementsByTagName('canvas')[0];2fE办公区 - 实用经验教程分享!

    engine = canvas.getContext('2d');2fE办公区 - 实用经验教程分享!

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

    width = window.innerWidth;2fE办公区 - 实用经验教程分享!

    height = window.innerHeight;2fE办公区 - 实用经验教程分享!

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

    canvas.setAttribute('width', width);2fE办公区 - 实用经验教程分享!

    canvas.setAttribute('height', height);2fE办公区 - 实用经验教程分享!

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

    bgTop = engine.createLinearGradient(0, 0, 0, height / 2);2fE办公区 - 实用经验教程分享!

    bgTop.addColorStop(0, '#000');2fE办公区 - 实用经验教程分享!

    bgTop.addColorStop(1, '#110');2fE办公区 - 实用经验教程分享!

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

    bgBot = engine.createLinearGradient(0, height / 2, 0, height);2fE办公区 - 实用经验教程分享!

    bgBot.addColorStop(0, '#000');2fE办公区 - 实用经验教程分享!

    bgBot.addColorStop(1, '#001');2fE办公区 - 实用经验教程分享!

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

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

    var request = function()2fE办公区 - 实用经验教程分享!

    {2fE办公区 - 实用经验教程分享!

    window.requestAnimationFrame(tick);2fE办公区 - 实用经验教程分享!

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

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

    var solveBirdMove = function(bird)2fE办公区 - 实用经验教程分享!

    {2fE办公区 - 实用经验教程分享!

    ['x', 'y', 'z'].forEach(function(key) {2fE办公区 - 实用经验教程分享!

    if (Math.abs(bird.move[key]) > 0.003) {2fE办公区 - 实用经验教程分享!

    bird.move[key] *= 0.99;2fE办公区 - 实用经验教程分享!

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

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

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

    if (frame % bird.ownMove.t === 0) {2fE办公区 - 实用经验教程分享!

    bird.ownMove.x = (0.5 - Math.random()) / 3;2fE办公区 - 实用经验教程分享!

    bird.ownMove.y = (0.5 - Math.random()) / 3;2fE办公区 - 实用经验教程分享!

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

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

    bird.move.x = speed * (mouse.x - bird.pos.x bird.ownMove.x) * bird.speed;2fE办公区 - 实用经验教程分享!

    bird.move.y = speed * (mouse.y - bird.pos.y bird.ownMove.y) * bird.speed;2fE办公区 - 实用经验教程分享!

    bird.move.z = speed * (mouse.z - bird.pos.z) * bird.speed;2fE办公区 - 实用经验教程分享!

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

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

    var applyPath = function(pathStack)2fE办公区 - 实用经验教程分享!

    {2fE办公区 - 实用经验教程分享!

    engine.moveTo(pathStack[0].x, pathStack[0].y);2fE办公区 - 实用经验教程分享!

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

    for (var i = 1; i pathStack.length; i ) {2fE办公区 - 实用经验教程分享!

    engine.lineTo(pathStack[i].x, pathStack[i].y);2fE办公区 - 实用经验教程分享!

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

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

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

    var drawBird = function(bird)2fE办公区 - 实用经验教程分享!

    {2fE办公区 - 实用经验教程分享!

    engine.fillStyle = 'hsl(' (frame % 360) ', 100%, 90%)';2fE办公区 - 实用经验教程分享!

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

    var pos = {2fE办公区 - 实用经验教程分享!

    x : bird.pos.x * width,2fE办公区 - 实用经验教程分享!

    y : bird.pos.y * height,2fE办公区 - 实用经验教程分享!

    z : bird.pos.z * 1.52fE办公区 - 实用经验教程分享!

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

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

    var size = (width height) / 200 * pos.z * z.current;2fE办公区 - 实用经验教程分享!

    var atan = Math.atan2(bird.move.y, bird.move.x);2fE办公区 - 实用经验教程分享!

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

    engine.lineWidth = 1;2fE办公区 - 实用经验教程分享!

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

    var p = function(rad, customSize)2fE办公区 - 实用经验教程分享!

    {2fE办公区 - 实用经验教程分享!

    return {2fE办公区 - 实用经验教程分享!

    x : pos.x Math.cos(atan rad * Math.PI * 2) * size * customSize,2fE办公区 - 实用经验教程分享!

    y : pos.y Math.sin(atan rad * Math.PI * 2) * size * customSize2fE办公区 - 实用经验教程分享!

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

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

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

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

    addLinePath(bird, p(0.5, 1.3));2fE办公区 - 实用经验教程分享!

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

    engine.beginPath();2fE办公区 - 实用经验教程分享!

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

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

    applyPath([2fE办公区 - 实用经验教程分享!

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

    p(0, 1.2),2fE办公区 - 实用经验教程分享!

    p(0.01, 0.9),2fE办公区 - 实用经验教程分享!

    p(0.05, 0.7),2fE办公区 - 实用经验教程分享!

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

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

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

    p(0.47, 0.9),2fE办公区 - 实用经验教程分享!

    p(0.45, 1.5),2fE办公区 - 实用经验教程分享!

    p(0.47, 1.2),2fE办公区 - 实用经验教程分享!

    p(0.5, 1.5),2fE办公区 - 实用经验教程分享!

    p(0.52, 1.2),2fE办公区 - 实用经验教程分享!

    p(0.55, 1.5),2fE办公区 - 实用经验教程分享!

    p(0.53, 0.9),2fE办公区 - 实用经验教程分享!

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

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

    p(-0.25, 0.5),2fE办公区 - 实用经验教程分享!

    p(-0.05, 0.7),2fE办公区 - 实用经验教程分享!

    p(-0.01, 0.9),2fE办公区 - 实用经验教程分享!

    p(0, 1.2)2fE办公区 - 实用经验教程分享!

    ]);2fE办公区 - 实用经验教程分享!

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

    engine.fill();2fE办公区 - 实用经验教程分享!

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

    var wingWave = Math.sin(bird.wing);2fE办公区 - 实用经验教程分享!

    var wingAdd = wingWave * 0.1;2fE办公区 - 实用经验教程分享!

    var wingPositiveWave = (wingWave 1) / 2;2fE办公区 - 实用经验教程分享!

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

    engine.beginPath();2fE办公区 - 实用经验教程分享!

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

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

    applyPath([2fE办公区 - 实用经验教程分享!

    p(0, 0.5),2fE办公区 - 实用经验教程分享!

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

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

    p(-0.15, wingPositiveWave),2fE办公区 - 实用经验教程分享!

    p(-0.25, -1 3 * wingPositiveWave),2fE办公区 - 实用经验教程分享!

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

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

    p(-0.4, 0.5),2fE办公区 - 实用经验教程分享!

    p(0, 0)2fE办公区 - 实用经验教程分享!

    ]);2fE办公区 - 实用经验教程分享!

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

    engine.fill();2fE办公区 - 实用经验教程分享!

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

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

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

    var addLinePath = function(bird, pos)2fE办公区 - 实用经验教程分享!

    {2fE办公区 - 实用经验教程分享!

    bird.lines[birdLineIndex * 2] = pos.x;2fE办公区 - 实用经验教程分享!

    bird.lines[birdLineIndex * 2 1] = pos.y;2fE办公区 - 实用经验教程分享!

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

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

    var drawBirdLines = function()2fE办公区 - 实用经验教程分享!

    {2fE办公区 - 实用经验教程分享!

    for (var i = birdLineCount; i >= 2; i--) {2fE办公区 - 实用经验教程分享!

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

    engine.beginPath();2fE办公区 - 实用经验教程分享!

    engine.lineWidth = i / birdLineCount * (width height) / 1000;2fE办公区 - 实用经验教程分享!

    engine.strokeStyle = 'hsla(' ((frame i) % 360) ', 100%, 50%, ' i / birdLineCount ')';2fE办公区 - 实用经验教程分享!

    // engine.strokeStyle = 'hsla(230, 0%, 30%, ' i / birdLineCount / 2 ')';2fE办公区 - 实用经验教程分享!

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

    var currentIndex = (birdLineIndex i) % birdLineCount;2fE办公区 - 实用经验教程分享!

    var lastIndex = (birdLineIndex i birdLineCount - 1) % birdLineCount;2fE办公区 - 实用经验教程分享!

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

    birds.forEach(function(bird) {2fE办公区 - 实用经验教程分享!

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

    if (bird.lines[lastIndex * 2] !== 0 && bird.lines[currentIndex * 2] !== 0) {2fE办公区 - 实用经验教程分享!

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

    engine.moveTo(2fE办公区 - 实用经验教程分享!

    bird.lines[currentIndex * 2],2fE办公区 - 实用经验教程分享!

    bird.lines[currentIndex * 2 1]2fE办公区 - 实用经验教程分享!

    );2fE办公区 - 实用经验教程分享!

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

    engine.lineTo(2fE办公区 - 实用经验教程分享!

    bird.lines[lastIndex * 2],2fE办公区 - 实用经验教程分享!

    bird.lines[lastIndex * 2 1]2fE办公区 - 实用经验教程分享!

    )2fE办公区 - 实用经验教程分享!

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

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

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

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

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

    engine.stroke();2fE办公区 - 实用经验教程分享!

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

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

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

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

    var drawShine = function()2fE办公区 - 实用经验教程分享!

    {2fE办公区 - 实用经验教程分享!

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

    engine.fillStyle = 'hsla(' (frame % 360) ', 100%, 90%, 0.01)';2fE办公区 - 实用经验教程分享!

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

    engine.beginPath();2fE办公区 - 实用经验教程分享!

    birds.forEach(function(bird) {2fE办公区 - 实用经验教程分享!

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

    engine.moveTo(bird.pos.x * width, bird.pos.y * height);2fE办公区 - 实用经验教程分享!

    engine.arc(2fE办公区 - 实用经验教程分享!

    bird.pos.x * width,2fE办公区 - 实用经验教程分享!

    bird.pos.y * height,2fE办公区 - 实用经验教程分享!

    bird.pos.z * (width height) / 30,2fE办公区 - 实用经验教程分享!

    0,2fE办公区 - 实用经验教程分享!

    Math.PI * 22fE办公区 - 实用经验教程分享!

    );2fE办公区 - 实用经验教程分享!

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

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

    engine.fill();2fE办公区 - 实用经验教程分享!

    engine.closePath();2fE办公区 - 实用经验教程分享!

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

    engine.globalCompositeOperation = 'source-over';2fE办公区 - 实用经验教程分享!

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

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

    var renderBirds = function()2fE办公区 - 实用经验教程分享!

    {2fE办公区 - 实用经验教程分享!

    birds.forEach(function(bird) {2fE办公区 - 实用经验教程分享!

    solveBirdMove(bird);2fE办公区 - 实用经验教程分享!

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

    bird.wing = 0.05 bird.wingAdd * 0.3 * speed;2fE办公区 - 实用经验教程分享!

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

    bird.pos.x = bird.move.x;2fE办公区 - 实用经验教程分享!

    bird.pos.y = bird.move.y;2fE办公区 - 实用经验教程分享!

    bird.pos.z = bird.move.z;2fE办公区 - 实用经验教程分享!

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

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

    drawBirdLines();2fE办公区 - 实用经验教程分享!

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

    birdLineIndex = (birdLineIndex 1) % birdLineCount;2fE办公区 - 实用经验教程分享!

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

    birds.forEach(function(bird) {2fE办公区 - 实用经验教程分享!

    drawBird(bird);2fE办公区 - 实用经验教程分享!

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

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

    drawShine();2fE办公区 - 实用经验教程分享!

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

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

    var clear = function()2fE办公区 - 实用经验教程分享!

    {2fE办公区 - 实用经验教程分享!

    engine.clearRect(0, 0, width, height);2fE办公区 - 实用经验教程分享!

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

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

    var drawBg = function()2fE办公区 - 实用经验教程分享!

    {2fE办公区 - 实用经验教程分享!

    engine.fillStyle = bgTop;2fE办公区 - 实用经验教程分享!

    engine.fillRect(0, 0, width, height / 2);2fE办公区 - 实用经验教程分享!

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

    engine.fillStyle = bgBot;2fE办公区 - 实用经验教程分享!

    engine.fillRect(0, height / 2, width, height);2fE办公区 - 实用经验教程分享!

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

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

    var tick = function()2fE办公区 - 实用经验教程分享!

    {2fE办公区 - 实用经验教程分享!

    frame ;2fE办公区 - 实用经验教程分享!

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

    z.current = (z.target - z.current) / 100;2fE办公区 - 实用经验教程分享!

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

    clear();2fE办公区 - 实用经验教程分享!

    // drawBg();2fE办公区 - 实用经验教程分享!

    renderBirds();2fE办公区 - 实用经验教程分享!

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

    request();2fE办公区 - 实用经验教程分享!

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

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

    var createBirds = function()2fE办公区 - 实用经验教程分享!

    {2fE办公区 - 实用经验教程分享!

    birds = [];2fE办公区 - 实用经验教程分享!

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

    for (var i = 0; i config.number; i ) {2fE办公区 - 实用经验教程分享!

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

    birds.push({2fE办公区 - 实用经验教程分享!

    wing : Math.random(),2fE办公区 - 实用经验教程分享!

    wingAdd : Math.random(),2fE办公区 - 实用经验教程分享!

    speed : (0.2 Math.random() * 0.8) / 2000,2fE办公区 - 实用经验教程分享!

    pos : {2fE办公区 - 实用经验教程分享!

    x : 0.25 Math.random() * 0.5,2fE办公区 - 实用经验教程分享!

    y : 0.25 Math.random() * 0.5,2fE办公区 - 实用经验教程分享!

    z : Math.random()2fE办公区 - 实用经验教程分享!

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

    move : {2fE办公区 - 实用经验教程分享!

    x : 0,2fE办公区 - 实用经验教程分享!

    y : 0,2fE办公区 - 实用经验教程分享!

    z : 02fE办公区 - 实用经验教程分享!

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

    ownMove : {2fE办公区 - 实用经验教程分享!

    t : 20 Math.random() * 100 | 0,2fE办公区 - 实用经验教程分享!

    x : 0,2fE办公区 - 实用经验教程分享!

    y : 02fE办公区 - 实用经验教程分享!

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

    tar : {2fE办公区 - 实用经验教程分享!

    x : 0.5,2fE办公区 - 实用经验教程分享!

    y : 0.52fE办公区 - 实用经验教程分享!

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

    lines : new Float32Array(birdLineCount * 2)2fE办公区 - 实用经验教程分享!

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

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

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

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

    var registerMouse = function()2fE办公区 - 实用经验教程分享!

    {2fE办公区 - 实用经验教程分享!

    setInterval(function() {2fE办公区 - 实用经验教程分享!

    mouse.x = Math.random();2fE办公区 - 实用经验教程分享!

    mouse.y = Math.random();2fE办公区 - 实用经验教程分享!

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

    z.target = 0.5 Math.random();2fE办公区 - 实用经验教程分享!

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

    }, 1000);2fE办公区 - 实用经验教程分享!

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

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

    this.run = function()2fE办公区 - 实用经验教程分享!

    {2fE办公区 - 实用经验教程分享!

    registerMouse();2fE办公区 - 实用经验教程分享!

    prepare();2fE办公区 - 实用经验教程分享!

    createBirds();2fE办公区 - 实用经验教程分享!

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

    tick();2fE办公区 - 实用经验教程分享!

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

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

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

    var b = new Birds();2fE办公区 - 实用经验教程分享!

    b.run();2fE办公区 - 实用经验教程分享!

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

    html5 canvas一群鸟飞行特效2fE办公区 - 实用经验教程分享!

  • 5

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

    html5 canvas一群鸟飞行特效2fE办公区 - 实用经验教程分享!

  • 6

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

    html5 canvas一群鸟飞行特效2fE办公区 - 实用经验教程分享!

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


    标签: HTML

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