温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
  • 忘记密码?
登录注册×
获取短信验证码
其他方式登录
点击 登录注册 即表示同意 《亿速云用户服务条款》
  • 服务器
  • 数据库
  • 开发技术
  • 网络安全
  • 互联网科技
登 录 注册有礼
最新更新 网站标签 地图导航
产品
  • 首页 > 
  • 教程 > 
  • 开发技术 > 
  • web开发 > 
  • 如何用html、css、js实现动画效果

如何用html、css、js实现动画效果

发布时间:2020-07-03 13:42:28 来源:亿速云 阅读:172 作者:元一 栏目: web开发

如何用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>

扩展:

制作动画效果还有其他方法

网上可以搜到很多封装好的动画插件,这些插件可以直接引入到页面中,通过初试话和配置的方式进行设定,直接在页面中展示动画。

如:waves,textillate.js等等。

使用canvas制作动画

我们还可以使用canvas在浏览器上画图,并且利用其api,制作动画。canvas使用的地方非常多,尤其是在制作h5小游戏上。

同样都是使用编码的方式由前端开发工程师完成动画效果,canvas要比原生js效率高的多,流畅的多。通过画笔的方式,能够轻松的实现更多的动画效果。

引用gif图片

如果在需求特别紧急,而且动画又特别复杂的情况下,自己没有把握按时实现效果,或者代价太大,真的,别犹豫,上gif图片吧,不要在技术上纠结了,虽然在工程师的角度上这样做很low,但是,用户的体验是没有影响的~所以,别纠结,就是要快!完成最重要了!

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节
推荐阅读:
  1. 如恶化在html5中做出图片转圈的动画效果
  2. JS+CSS实现网页加载中的动画效果

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

html css javascript
  • 上一篇新闻:
    哆啦A梦消除连连看游戏源码项目完整版
  • 下一篇新闻:
    MyBatis中resultMap和resultType有什么不同

猜你喜欢

  • c语言中字符串怎么定义
  • java怎么和数据库交互
  • java怎么与数据库通信
  • centos7查看进程的命令是什么
  • php分页跳转失败的原因及解决方法是什么
  • string在c语言中怎么用
  • c++ tuple赋值的方法是什么
  • linux系统怎么连接wifi
  • c语言怎么找最大值
  • c语言负数怎么输入
最新资讯
  • 如何利用Kylin进行大数据的实时数据分析和数据挖掘结合
  • Kylin如何支持数据的实时数据分析和可视化探索
  • 如何使用Kylin进行大数据的实时数据分析和预测建模
  • Kylin是否支持数据的实时数据分析和异常检测
  • 如何利用Kylin进行大数据的实时数据分析和情感分析
  • Kylin如何支持数据的实时数据分析和文本挖掘
  • 如何使用Kylin进行大数据的实时数据分析和时间序列分析
  • Kylin是否支持数据的实时数据分析和复杂事件处理
  • 如何利用Kylin进行大数据的实时数据分析和社交网络分析
  • Kylin如何支持数据的实时数据分析和推荐系统构建
相关推荐
  • 如使用JS获取HTML DOM元素
  • iOS如何实现加载本地HTML,css,js
  • 如何用recorder.js+HTML5实现录音功能
  • 如何用html+css+js实现点赞效果
  • html css js是什么
  • html如何用link引入css
  • 用CSS3+HTML5+JS 怎么实现块的收缩与展开的动画效果
  • 如何用HTML+JS实现Android闹钟功能
  • 如何用React+CSS3实现微信拆红包动画效果
  • JS、CSS、HTML怎么实现注册页面

相关标签

index.html html5 -html html基础 html5标准 v-html html文件 css+html html5+css html5plus html dom html5的学习笔记 html5基础 html注释 html文本标签 html表格 html-webpack-plugin html编辑器 htmlspecialchars() html表单
AI

天下网标王重庆网络广告推广南充SEO按天扣费哪家好十堰网络广告推广公司四平seo哪家好徐州网站制作设计哪家好贵阳高端网站设计多少钱蚌埠网络广告推广多少钱锦州网站开发价格盘锦英文网站建设公司铜川建网站推荐横岗至尊标王多少钱大鹏网站制作多少钱上饶优化价格长治设计公司网站渭南企业网站制作湘西seo价格北京百度竞价推荐朔州百搜标王哪家好平顶山关键词排名公司黔西南建网站哪家好长春外贸网站制作推荐飞来峡至尊标王多少钱南昌百度网站优化公司日照建网站推荐张掖网站关键词优化许昌SEO按天扣费推荐湖州网站改版哪家好济南百度网站优化排名公司广州网页制作多少钱滁州网站关键词优化报价香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化