当前位置: 首页  >  下载站  >  js特效  >  html5特效  >  HTML5的岩浆动画背景特效

HTML5的岩浆动画背景特效

HTML5的岩浆动画背景特效

HTML5的岩浆动画背景特效
分类:   js特效 / html5特效 发布时间:  2017-12-23 访问量:  1622
下载量:  56
点击下载 预览效果
更多>

最新下载

jQuery企业留言表单联系代码

jQuery企业留言表单联系代码是一款简洁实用的企业留言表单和联系我们介绍页面代码。
118 2024-02-29

HTML5 MP3音乐盒播放特效

HTML5 MP3音乐盒播放特效是一款基于html5+css3制作可爱的音乐盒表情,点击开关按钮mp3音乐播放器。
112 2024-02-29

HTML5炫酷粒子动画导航菜单特效

HTML5炫酷粒子动画导航菜单特效是一款导航菜单采用鼠标悬停变色的特效。
142 2024-02-29

jQuery可视化表单拖拽编辑代码

jQuery可视化表单拖拽编辑代码是一款基于jQuery和bootstrap框架制作可视化表单。
102 2024-02-29

VUE.JS仿酷狗音乐播放器代码

VUE.JS仿酷狗音乐播放器代码是一款基于js跟css3实现的仿酷狗网页音乐播放器特效。
84 2024-02-29

经典html5推箱子小游戏

经典html5推箱子小游戏总共有100关,移动方式有上下左右按键。
134 2024-02-29
更多>

最新教程

HTML5的岩浆动画背景特效

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>可设置动画属性的HTML5岩浆动画背景特效</title>

<style>
@charset "UTF-8";
*, *:before, *:after {
  box-sizing: border-box;
}

body {
  padding: 0;
  margin: 0;
  overflow: hidden;
  font-family: 'Roboto', sans-serif;
}

canvas {
  width: 100vw;
  height: 100vh;
}

h1 {
  position: absolute;
  z-index: 1;
  width: 100%;
  left: 0;
  top: 50%;
  -webkit-transform: translateY(-50%);
          transform: translateY(-50%);
  mix-blend-mode: overlay;
  color: rgba(0, 0, 0, 0.3);
  line-height: 0;
  font-size: 16px;
  letter-spacing: 4px;
  text-align: center;
  text-transform: uppercase;
  transform: translateY(-50%);
  cursor: pointer;
  -webkit-transition: color .2s ease-in-out;
  transition: color .2s ease-in-out;
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
}
h1:hover {
  color: rgba(0, 0, 0, 0.8);
}
</style>
</head>
<body>

<script src="js/chroma.min.js"></script>
<script src="js/dat.gui.min.js"></script>

<canvas id="canvas"></canvas>

<h1>The Floor is Lava</h1>

<script>
'use strict';

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var settings = {
  amplitudeX: 150,
  amplitudeY: 20,
  lines: 30,
  startColor: '#500c44',
  endColor: '#b4d455'
};

var c = document.getElementById("canvas");
var ctx = c.getContext("2d");
var winW = window.innerWidth;
var winH = window.innerHeight;
var Paths = [];
var color = [];
var mouseY = 0;
var mouseDown = false;
var time = 0;
var curves = undefined;
var velocity = undefined;

var Path = function () {
  function Path(y, color) {
    _classCallCheck(this, Path);

    this.y = y;
    this.color = color;
    this.root = [];
    this.create();
    this.draw();
  }

  Path.prototype.create = function create() {
    var rootX = 0;
    var rootY = this.y;

    this.root = [{ x: rootX, y: rootY }];

    while (rootX < winW) {
      var casual = Math.random() > 0.5 ? 1 : -1;
      var x = parseInt(settings.amplitudeX / 2 + Math.random() * settings.amplitudeX / 2);
      var y = parseInt(rootY + casual * (settings.amplitudeY / 2 + Math.random() * settings.amplitudeY / 2));
      rootX += x;
      var delay = Math.random() * 100;
      this.root.push({ x: rootX, y: y, height: rootY, casual: casual, delay: delay });
    }
  };

  Path.prototype.draw = function draw() {
    ctx.beginPath();
    ctx.moveTo(0, winH);

    ctx.lineTo(this.root[0].x, this.root[0].y);

    for (var i = 1; i < this.root.length - 1; i++) {

      var x = this.root[i].x;
      var y = this.root[i].y;
      var nextX = this.root[i + 1].x;
      var nextY = this.root[i + 1].y;

      var xMid = (x + nextX) / 2;
      var yMid = (y + nextY) / 2;
      var cpX1 = (xMid + x) / 2;
      var cpY1 = (yMid + y) / 2;
      var cpX2 = (xMid + nextX) / 2;
      var cpY2 = (yMid + nextY) / 2;

      ctx.quadraticCurveTo(cpX1, y, xMid, yMid);
      ctx.quadraticCurveTo(cpX2, nextY, nextX, nextY);
    }

    var lastPoint = this.root.reverse()[0];
    this.root.reverse();
    ctx.lineTo(lastPoint.x, lastPoint.y);
    ctx.lineTo(winW, winH);
    ctx.fillStyle = this.color;
    ctx.fill();
    ctx.closePath();
  };

  return Path;
}();

/* INIT */

var path = undefined;
function init() {
  c.width = winW;
  c.height = winH;
  Paths = [];

  color = chroma.scale([settings.startColor, settings.endColor]).mode('lch').colors(settings.lines);

  document.body.style = 'background: ' + settings.startColor;

  for (var i = 0; i < settings.lines; i++) {
    Paths.push(new Path(winH / settings.lines * i, color[i]));
    settings.startY = winH / settings.lines * i;
  }
}

/* WIN RESIZE */
window.addEventListener('resize', function () {
  winW = window.innerWidth;
  winH = window.innerHeight;
  c.width = winW;
  c.height = winH;
  init();
});
window.dispatchEvent(new Event("resize"));

/* RENDER */
function render() {
  c.width = winW;
  c.height = winH;

  curves = mouseDown ? 2 : 4;
  velocity = mouseDown ? 6 : 0.8;

  time += mouseDown ? 0.1 : 0.05;

  Paths.forEach(function (path, i) {
    path.root.forEach(function (r, j) {
      if (j % curves == 1) {
        var move = Math.sin(time + r.delay) * velocity * r.casual;
        r.y -= move / 2 - move;
      }
      if (j + 1 % curves == 0) {
        var move = Math.sin(time + r.delay) * velocity * r.casual;
        r.x += move / 2 - move / 10;
      }
    });

    path.draw();
  });

  requestAnimationFrame(render);
}
render();

/* MOUSEDOWN */
'mousedown touchstart'.split(' ').forEach(function (e) {
  document.addEventListener(e, function () {
    mouseDown = true;
  });
});

/* MOUSEUP */
'mouseup mouseleave touchend'.split(' ').forEach(function (e) {
  document.addEventListener(e, function () {
    mouseDown = false;
  });
});

/* MOUSEMOVE */
'mousemove touchmove'.split(' ').forEach(function (e) {
  document.addEventListener(e, function (e) {
    mouseY = e.clientY || e.touches[0].clientY;
  });
});

/* DATA GUI */
var gui = function datgui() {
  var gui = new dat.GUI();
  // dat.GUI.toggleHide();
  gui.closed = true;
  gui.add(settings, "amplitudeX", 40, 200).step(20).onChange(function (newValue) {
    init();
  });
  gui.add(settings, "amplitudeY", 0, 100).step(1).onChange(function (newValue) {
    init();
  });
  gui.add(settings, "lines", 5, 50).step(1).onChange(function (newValue) {
    init();
  });
  gui.addColor(settings, "startColor").onChange(function (newValue) {

    init();
    document.querySelector('h1').innerHTML = 'or whatever you want';
  });
  gui.addColor(settings, "endColor").onChange(function (newValue) {
    init();
    document.querySelector('h1').innerHTML = 'or whatever you want';
  });

  return gui;
}();
</script>

</body>
</html>

这是一款不错的可设置动画属性的HTML5岩浆动画背景特效,展开网页右顶部菜单便可以设置动画动画幅度、颜色等属性。

本站所有资源都是由网友投搞发布,或转载各大下载站,请自行检测软件的完整性!本站所有资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!如有侵权请联系我们删除下架,联系方式:admin@php.cn

相关推荐

HTML5的岩浆动画背景特效

HTML5的岩浆动画背景特效
html5特效
2017-12-23

HTML5-Canvas岩浆动画背景特效

HTML5-Canvas岩浆动画背景特效
html5特效
2018-07-05

可设置动画属性的HTML5岩浆动画背景特效

一款可设置动画属性的HTML5岩浆动画背景特效
html5特效
2023-04-19

HTML5 Canvas的多款星空背景动画特效

HTML5 Canvas的多款星空背景动画特效
html5特效
2018-02-05

html5 canvas梦幻背景动画特效

html5 canvas梦幻背景动画特效是一款全屏动态背景动画特效下载。
html5特效
2017-03-28

HTML5 Canvas菱角背景动画特效

HTML5 Canvas菱角背景动画特效是一款酷炫的多边形背景动画特效。
html5特效
2017-06-26

HTML5+Canvas碎纸屑闪烁背景动画特效

HTML5+Canvas碎纸屑闪烁背景动画特效
html5特效
2018-05-18

HTML5 Canvas碎纸屑闪烁背景动画特效

HTML5 Canvas碎纸屑闪烁背景动画特效
jQuery特效
2018-05-14

热门下载

jQuery左侧下拉导航菜单后台框架模板

jQuery制作左侧垂直下拉导航栏,内嵌iframe导航菜单后台页面模板。
菜单导航
2021-02-04

科技感的数字时钟vue特效

时钟,html5时钟,vue
时间日期
2021-06-17

炫酷的光标丝带鼠标移动特效

基于canvas制作炫酷的鼠标移动线条动画,丝带光标动画特效。
鼠标特效
2021-02-22

canvas音谱可视化mp3音乐播放器代码

html5 canvas通过AudioContext对获取audio标签播放的音域和音高,调用js绘制相应高度的矩形或线条。
播放器特效
2021-03-10

创意的时间轮盘时钟特效

js css3制作全屏的轮盘时钟,时间轮盘旋转动画特效。
时间日期
2021-01-20

迷你音乐播放器vue特效

html5 vue制作多功能mp3音乐播放器,带专辑图片,点赞收藏,上一首/下一首/开始/暂停切换,社交转载,播放进度条等功能演示特效。
播放器特效
2021-02-18
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号