pixi实现随音乐舞动的多彩圆点粒子动画效果代码

代码语言:html

所属分类:粒子

代码描述:pixi实现随音乐舞动的多彩圆点粒子动画效果代码

代码标签: pixi 粒子 圆点 动画

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<html>

<head>
    <style>
        html, body {
        	margin:0;
          overflow:hidden;
          background:#000;
          color:white;
          font-family:Arial;
        }
        
        .message{
          padding:20px;
          position:absolute;
          top:50%;
          left:50%;
          transform:translate(-50%, -50%);
          background:black;
          cursor:pointer;
          font-size:14px;
          border:1px solid white;
        }
    </style>
    <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/jquery-3.2.1.min.js"></script>
    <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/dat.gui-min.js"></script>
    <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/pixi.1.6.1.js"></script>
</head>

<body>
    <h2 class="message">PLAY</h2>
    <script>
        (function() {
          var AUDIO_URL, TOTAL_BANDS, analyser, analyserDataArray, arrCircles, audio, build, buildCircles, canplay, changeMode, changeTheme, circlesContainer, cp, createCircleTex, gui, hammertime, init, initAudio, initGUI, initGestures, isPlaying, k, message, modes, mousePt, mouseX, mouseY, params, play, renderer, resize, stage, startAnimation, texCircle, themes, themesNames, update, v, windowH, windowW;
        
          AUDIO_URL = "//repo.bfw.wiki/bfwrepo/sound/5e148aa3821f2.mp3";
        
          modes = ["cubic", "conic"];
        
          themes = {
            pinkBlue: [0xFF0032, 0xFF5C00, 0x00FFB8, 0x53FF00],
            yellowGreen: [0xF7F6AF, 0x9BD6A3, 0x4E8264, 0x1C2124, 0xD62822],
            yellowRed: [0xECD078, 0xD95B43, 0xC02942, 0x542437, 0x53777A],
            blueGray: [0x343838, 0x005F6B, 0x008C9E, 0x00B4CC, 0x00DFFC],
            blackWhite: [0xFFFFFF, 0x000000, 0xFFFFFF, 0x000000, 0xFFFFFF]
          };
        
          themesNames = [];
        
          for (k in themes) {
            v = themes[k];
            themesNames.push(k);
          }
        
          // PARAMETERS
          params = {
            // public
            mode: modes[0],
            theme: themesNames[0],
            radius: 3,
            distance: 600,
            size: .5,
            // private
            numParticles: 5000,
            sizeW: 1,
            sizeH: 1,
            radiusParticle: 60,
            themeArr: themes[this.theme]
          };
        
          TOTAL_BANDS = 256;
        
          cp = new PIXI.Point();
        
          mouseX = 0;
        
          mouseY = 0;
        
          mousePt = new PIXI.Point();
        
          windowW = 0;
        
          windowH = 0;
        
          stage = null;
        
          renderer = null;
        
          texCircle = null;
        
          circlesContainer = null;
        
          arrCircles = [];
        
          hammertime = null;
        
          message = null;
        
          // audio
          audio = null;
        
          analyser = null;
        
          analyserDataArray = null;
        
          isPlaying = false;
        
          canplay = false;
        
          // gui
          gui = null;
        
          init = function() {
            initGestures();
            message = $(".message");
            message.on("click", play);
            resize();
            build();
            resize();
            mousePt.x = cp.x;
            mousePt.y = cp.y;
            $(window).resize(resize);
            startAnimation();
            return initGUI();
          };
        
          play = function() {
            if (isPlaying) {
              return;
            }
            initAudio();
            message.css("cursor", "default");
            if (canplay) {
              message.hide();
            } else {
              message.html("LOADING MUSIC...");
            }
            audio.play();
            return isPlaying = true;
          };
        
          initGUI = function() {
            var modeController, sizeController, themeController;
            gui = new dat.GUI();
            // if window.innerWidth < 500
            gui.close();
            modeController = gui.add(params, 'mode', modes);
            modeController.onChange(function(value) {
              return changeMode(value);
            });
            themeController = gui.add(params, 'theme', themesNames);
            themeController.onChange(function(value) {
              return changeTheme(params.theme);
            });
            gui.add(params, 'radius', 1, 8);
            gui.add(params, 'distance', 100, 1000);
            sizeController = gui.add(params, 'size', 0, 1);
            return sizeController.onChange(function(value) {
              return resize(value);
            });
          };
        
          initAudio = function() {
            var context, source;
            context = new (window.AudioContext || window.webkitAudioContext)();
            analyser = context.createAnalyser();
            //   analyser.smoothingTimeConstant = 0.5
            source = null;
            audio = new Audio();
            audio.crossOrigin = "anonymous";
            audio.src = AUDIO_URL;
            return audio.addEventListener('canplay', function() {
              var bufferLength;
              if (isPlaying) {
                message.hide();
              }
              canplay = true;
              source = context.createMediaElementSource(audio);
              source.connect(analyser);
              source.connect(context.destination);
              analyser.fftSize = TOTAL_BANDS * 2;
              bufferLength = analyser.frequencyBinCount;
              return analyserDataArray = new Uint8Array(bufferLength);
            });
          };
        
          startAnimation = function() {
            return requestAnimFrame(update);
          };
        
          initGestures = function() {
            return $(window).on('mousemove touchmove', function(e) {
              if (e.type === 'mousemove') {
                mouseX = e.clientX;
                return mouseY = e.clientY;
              } else {
                mouseX = e.originalEvent.changedTouches[0].clientX;
    .........完整代码请登录后点击上方下载按钮下载查看

网友评论0