html+css+js实现魔性的舞蹈动画效果(代码分享)

互联网 20-7-3
本篇文章给大家分享一下html+css+js实现魔性的舞蹈动画效果的代码。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

使用html+css+js实现魔性的舞蹈,让我们燥起来!!!

效果图:

代码如下,复制代码即可使用:

<!DOCTYPE html> <html > <head>   <meta charset="UTF-8">   <title>The Last Experience</title>   <style>       html {  overflow: hidden; } body {  position: absolute;  margin: 0;  padding: 0;  width: 100%;  height: 100%;  background: #000; } canvas {  position: absolute;  width: 100%;  height: 100%;  background: #000; }   </style>    </head> <body>        <script>         'use strict'; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Robot = function () {  function Robot(color, light, size, x, y, struct) {   _classCallCheck(this, Robot);   this.points = [];   this.links = [];   this.frame = 0;   this.dir = 1;   this.size = size;   this.color = Math.round(color);   this.light = light;   // ---- points ----   var id = 0;   for (var _iterator = struct.points, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {    var _ref;    if (_isArray) {     if (_i >= _iterator.length) break;     _ref = _iterator[_i++];    } else {     _i = _iterator.next();     if (_i.done) break;     _ref = _i.value;    }    var p = _ref;    this.points.push(new Point(id++, size * p[0] + x, size * p[1] + y, p[2]));   }   // ---- links ----   for (var _iterator2 = struct.links, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {    var _ref2;    if (_isArray2) {     if (_i2 >= _iterator2.length) break;     _ref2 = _iterator2[_i2++];    } else {     _i2 = _iterator2.next();     if (_i2.done) break;     _ref2 = _i2.value;    }    var l = _ref2;    var p0 = this.points[l[0]];    var p1 = this.points[l[1]];    var dx = p0.x - p1.x;    var dy = p0.y - p1.y;    this.links.push(new Link(this, p0, p1, Math.sqrt(dx * dx + dy * dy), l[2] * size / 3, l[3], l[4]));   }  }  Robot.prototype.update = function update() {   // ---- beat ----   if (++this.frame % 20 === 0) this.dir = -this.dir;   // ---- create giants ----   if (dancerDrag && this === dancerDrag && this.size < 16 && this.frame > 600) {    dancerDrag = null;    dancers.push(new Robot(this.color, this.light * 1.25, this.size * 2, pointer.x, pointer.y - 100 * this.size * 2, struct));    dancers.sort(function (d0, d1) {     return d0.size - d1.size;    });   }   // ---- update links ----   for (var _iterator3 = this.links, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {    var _ref3;    if (_isArray3) {     if (_i3 >= _iterator3.length) break;     _ref3 = _iterator3[_i3++];    } else {     _i3 = _iterator3.next();     if (_i3.done) break;     _ref3 = _i3.value;    }    var link = _ref3;    var p0 = link.p0;    var p1 = link.p1;    var dx = p0.x - p1.x;    var dy = p0.y - p1.y;    var dist = Math.sqrt(dx * dx + dy * dy);    if (dist) {     var tw = p0.w + p1.w;     var r1 = p1.w / tw;     var r0 = p0.w / tw;     var dz = (link.distance - dist) * link.force;     dx = dx / dist * dz;     dy = dy / dist * dz;     p1.x -= dx * r0;     p1.y -= dy * r0;     p0.x += dx * r1;     p0.y += dy * r1;    }   }   // ---- update points ----   for (var _iterator4 = this.points, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {    var _ref4;    if (_isArray4) {     if (_i4 >= _iterator4.length) break;     _ref4 = _iterator4[_i4++];    } else {     _i4 = _iterator4.next();     if (_i4.done) break;     _ref4 = _i4.value;    }    var point = _ref4;    // ---- drag ----    if (this === dancerDrag && point === pointDrag) {     point.x += (pointer.x - point.x) * 0.1;     point.y += (pointer.y - point.y) * 0.1;    }    // ---- dance ----    if (this !== dancerDrag) {     point.fn && point.fn(16 * Math.sqrt(this.size), this.dir);    }    // ---- verlet integration ----    point.vx = point.x - point.px;    point.vy = point.y - point.py;    point.px = point.x;    point.py = point.y;    point.vx *= 0.995;    point.vy *= 0.995;    point.x += point.vx;    point.y += point.vy + 0.01;   }   for (var _iterator5 = this.links, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {    var _ref5;    if (_isArray5) {     if (_i5 >= _iterator5.length) break;     _ref5 = _iterator5[_i5++];    } else {     _i5 = _iterator5.next();     if (_i5.done) break;     _ref5 = _i5.value;    }    var link = _ref5;    var p1 = link.p1;    // ---- ground ----    if (p1.y > canvas.height * ground - link.size * 0.5) {     p1.y = canvas.height * ground - link.size * 0.5;     p1.x -= p1.vx;     p1.vx = 0;     p1.vy = 0;    }    // ---- borders ----    if (p1.id === 1 || p1.id === 2) {     if (p1.x > canvas.width - link.size) p1.x = canvas.width - link.size;else if (p1.x < link.size) p1.x = link.size;    }   }  };  Robot.prototype.draw = function draw() {   for (var _iterator6 = this.links, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {    var _ref6;    if (_isArray6) {     if (_i6 >= _iterator6.length) break;     _ref6 = _iterator6[_i6++];    } else {     _i6 = _iterator6.next();     if (_i6.done) break;     _ref6 = _i6.value;    }    var link = _ref6;    if (link.size) {     var dx = link.p1.x - link.p0.x;     var dy = link.p1.y - link.p0.y;     var a = Math.atan2(dy, dx);     var d = Math.sqrt(dx * dx + dy * dy);     // ---- shadow ----     ctx.save();     ctx.translate(link.p0.x + link.size * 0.25, link.p0.y + link.size * 0.25);     ctx.rotate(a);     ctx.drawImage(link.shadow, -link.size * 0.5, -link.size * 0.5, d + link.size, link.size);     ctx.restore();     // ---- stroke ----     ctx.save();     ctx.translate(link.p0.x, link.p0.y);     ctx.rotate(a);     ctx.drawImage(link.image, -link.size * 0.5, -link.size * 0.5, d + link.size, link.size);     ctx.restore();    }   }  };  return Robot; }(); var Link = function Link(parent, p0, p1, dist, size, light, force) {  _classCallCheck(this, Link);  // ---- cache strokes ----  function stroke(color, axis) {   var image = document.createElement('canvas');   image.width = dist + size;   image.height = size;   var ict = image.getContext('2d');   ict.beginPath();   ict.lineCap = "round";   ict.lineWidth = size;   ict.strokeStyle = color;   ict.moveTo(size * 0.5, size * 0.5);   ict.lineTo(size * 0.5 + dist, size * 0.5);   ict.stroke();   if (axis) {    var s = size / 10;    ict.fillStyle = "#000";    ict.fillRect(size * 0.5 - s, size * 0.5 - s, s * 2, s * 2);    ict.fillRect(size * 0.5 - s + dist, size * 0.5 - s, s * 2, s * 2);   }   return image;  }  this.p0 = p0;  this.p1 = p1;  this.distance = dist;  this.size = size;  this.light = light || 1.0;  this.force = force || 0.5;  this.image = stroke("hsl(" + parent.color + " ,30%, " + parent.light * this.light + "%)", true);  this.shadow = stroke("rgba(0,0,0,0.5)"); }; var Point = function Point(id, x, y, fn, w) {  _classCallCheck(this, Point);  this.id = id;  this.x = x;  this.y = y;  this.w = w || 0.5;  this.fn = fn || null;  this.px = x;  this.py = y;  this.vx = 0;  this.vy = 0; }; var Canvas = function () {  function Canvas() {   var _this = this;   _classCallCheck(this, Canvas);   this.elem = document.createElement('canvas');   this.ctx = this.elem.getContext('2d');   document.body.appendChild(this.elem);   this.resize();   window.addEventListener('resize', function () {    return _this.resize();   }, false);  }  Canvas.prototype.resize = function resize() {   this.width = this.elem.width = this.elem.offsetWidth;   this.height = this.elem.height = this.elem.offsetHeight;   ground = this.height > 500 ? 0.85 : 1.0;  };  return Canvas; }(); var Pointer = function () {  function Pointer(canvas) {   var _this2 = this;   _classCallCheck(this, Pointer);   this.x = 0;   this.y = 0;   this.canvas = canvas;   window.addEventListener('mousemove', function (e) {    return _this2.move(e);   }, false);   canvas.elem.addEventListener('touchmove', function (e) {    return _this2.move(e);   }, false);   window.addEventListener('mousedown', function (e) {    return _this2.down(e);   }, false);   window.addEventListener('touchstart', function (e) {    return _this2.down(e);   }, false);   window.addEventListener('mouseup', function (e) {    return _this2.up(e);   }, false);   window.addEventListener('touchend', function (e) {    return _this2.up(e);   }, false);  }  Pointer.prototype.down = function down(e) {   this.move(e);   for (var _iterator7 = dancers, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) {    var _ref7;    if (_isArray7) {     if (_i7 >= _iterator7.length) break;     _ref7 = _iterator7[_i7++];    } else {     _i7 = _iterator7.next();     if (_i7.done) break;     _ref7 = _i7.value;    }    var dancer = _ref7;    for (var _iterator8 = dancer.points, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _iterator8[Symbol.iterator]();;) {     var _ref8;     if (_isArray8) {      if (_i8 >= _iterator8.length) break;      _ref8 = _iterator8[_i8++];     } else {      _i8 = _iterator8.next();      if (_i8.done) break;      _ref8 = _i8.value;     }     var point = _ref8;     var dx = pointer.x - point.x;     var dy = pointer.y - point.y;     var d = Math.sqrt(dx * dx + dy * dy);     if (d < 60) {      dancerDrag = dancer;      pointDrag = point;      dancer.frame = 0;     }    }   }  };  Pointer.prototype.up = function up(e) {   dancerDrag = null;  };  Pointer.prototype.move = function move(e) {   var touchMode = e.targetTouches,       pointer = undefined;   if (touchMode) {    e.preventDefault();    pointer = touchMode[0];   } else pointer = e;   this.x = pointer.clientX;   this.y = pointer.clientY;  };  return Pointer; }(); // ---- init ---- var ground = 1.0; var canvas = new Canvas(); var ctx = canvas.ctx; var pointer = new Pointer(canvas); var dancerDrag = null; var pointDrag = null; // ---- main loop ---- function run() {  requestAnimationFrame(run);  ctx.clearRect(0, 0, canvas.width, canvas.height);  ctx.fillStyle = "#222";  ctx.fillRect(0, 0, canvas.width, canvas.height * 0.15);  ctx.fillRect(0, canvas.height * 0.85, canvas.width, canvas.height * 0.15);  for (var _iterator9 = dancers, _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _iterator9[Symbol.iterator]();;) {   var _ref9;   if (_isArray9) {    if (_i9 >= _iterator9.length) break;    _ref9 = _iterator9[_i9++];   } else {    _i9 = _iterator9.next();    if (_i9.done) break;    _ref9 = _i9.value;   }   var dancer = _ref9;   dancer.update();   dancer.draw();  } } // ---- robot structure ---- var struct = {  points: [[0, -4, function (s, d) {   this.y -= 0.01 * s;  }], [0, -16, function (s, d) {   this.y -= 0.02 * s * d;  }], [0, 12, function (s, d) {   this.y += 0.02 * s * d;  }], [-12, 0], [12, 0], [-3, 34, function (s, d) {   if (d > 0) {    this.x += 0.01 * s;    this.y -= 0.015 * s;   } else {    this.y += 0.02 * s;   }  }], [3, 34, function (s, d) {   if (d > 0) {    this.y += 0.02 * s;   } else {    this.x -= 0.01 * s;    this.y -= 0.015 * s;   }  }], [-28, 0, function (s, d) {   this.x += this.vx * 0.035;   this.y -= 0.001 * s;  }], [28, 0, function (s, d) {   this.x += this.vx * 0.035;   this.y -= 0.001 * s;  }], [-3, 64, function (s, d) {   this.y += 0.02 * s;   if (d > 0) {    this.y -= 0.01 * s;   } else {    this.y += 0.05 * s;   }  }], [3, 64, function (s, d) {   this.y += 0.02 * s;   if (d > 0) {    this.y += 0.05 * s;   } else {    this.y -= 0.01 * s;   }  }], [0, -4.1]],  links: [[3, 7, 12, 0.5], [1, 3, 24, 0.5], [1, 0, 18, 0.5], [0, 11, 60, 0.8], [5, 9, 16, 0.5], [2, 5, 32, 0.5], [1, 2, 50, 1], [6, 10, 16, 1.5], [2, 6, 32, 1.5], [4, 8, 12, 1.5], [1, 4, 24, 1.5]] }; // ---- instanciate robots ---- var dancers = []; for (var i = 0; i < 6; i++) {  dancers.push(new Robot(i * 360 / 7, 80, 4, (i + 2) * canvas.width / 9, canvas.height * ground - 295, struct)); } run();     </script> </body> </html>

如有错误,欢迎联系我指正,非常感谢!!!

更多炫酷CSS3、html5、javascript特效代码,尽在:js特效大全

以上就是html+css+js实现魔性的舞蹈动画效果(代码分享)的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 舞蹈动画
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:如何取消JavaScript中的异步任务?

相关资讯