! function() {//封装方法,压缩之后减少文件大小function get_attribute(node, attr, default_value) {return node.getAttribute(attr) || default_value;}//封装方法,压缩之后减少文件大小function get_by_tagname(name) {return document.getElementsByTagName(name);}//获取配置参数function get_config_option() {var scripts = get_by_tagname("script"),script_len = scripts.length,script = scripts[script_len - 1]; //当前加载的scriptreturn {l: script_len, //长度,用于生成id用z: get_attribute(script, "zIndex", -1), //z-indexo: get_attribute(script, "opacity", 0.5), //opacityc: get_attribute(script, "color", "0,0,0"), //colorn: get_attribute(script, "count", 99) //count};}//设置canvas的高宽function set_canvas_size() {canvas_width = the_canvas.width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, canvas_height = the_canvas.height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;}//绘制过程function draw_canvas() {context.clearRect(0, 0, canvas_width, canvas_height);//随机的线条和当前位置联合数组var e, i, d, x_dist, y_dist, dist; //临时节点//遍历处理每一个点random_lines.forEach(function(r, idx) {r.x += r.xa, r.y += r.ya, //移动r.xa *= r.x > canvas_width || r.x < 0 ? -1 : 1, r.ya *= r.y > canvas_height || r.y < 0 ? -1 : 1, //碰到边界,反向反弹context.fillRect(r.x - 0.5, r.y - 0.5, 1, 1); //绘制一个宽高为1的点//从下一个点开始for (i = idx + 1; i < all_array.length; i++) {e = all_array[i];//不是当前点if (null !== e.x && null !== e.y) {x_dist = r.x - e.x, //x轴距离 ly_dist = r.y - e.y, //y轴距离 ndist = x_dist * x_dist + y_dist * y_dist; //总距离, mdist < e.max && (e === current_point && dist >= e.max / 2 && (r.x -= 0.03 * x_dist, r.y -= 0.03 * y_dist), //靠近的时候加速d = (e.max - dist) / e.max, context.beginPath(), context.lineWidth = d / 2, context.strokeStyle = "rgba(" + config.c + "," + (d + 0.2) + ")", context.moveTo(r.x, r.y), context.lineTo(e.x, e.y), context.stroke());}}}), frame_func(draw_canvas);}//创建画布,并添加到body中var the_canvas = document.createElement("canvas"), //画布config = get_config_option(), //配置canvas_id = "c_n" + config.l, //canvas idcontext = the_canvas.getContext("2d"), canvas_width, canvas_height, frame_func = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(func) {window.setTimeout(func, 1000 / 45);}, random = Math.random, current_point = {x: null, //当前鼠标xy: null, //当前鼠标ymax: 20000},all_array;the_canvas.id = canvas_id;the_canvas.style.cssText = "position:fixed;top:0;left:0;z-index:" + config.z + ";opacity:" + config.o;get_by_tagname("body")[0].appendChild(the_canvas);//初始化画布大小set_canvas_size(), window.onresize = set_canvas_size;//当时鼠标位置存储,离开的时候,释放当前位置信息window.onmousemove = function(e) {e = e || window.event, current_point.x = e.clientX, current_point.y = e.clientY;}, window.onmouseout = function() {current_point.x = null, current_point.y = null;};//随机生成config.n条线位置信息for (var random_lines = [], i = 0; config.n > i; i++) {var x = random() * canvas_width, //随机位置y = random() * canvas_height,xa = 2 * random() - 1, //随机运动方向ya = 2 * random() - 1;random_lines.push({x: x,y: y,xa: xa,ya: ya,max: 6000 //沾附距离});}all_array = random_lines.concat([current_point]);//0.1秒后绘制setTimeout(function() {draw_canvas();}, 10);
}();

效果图

canvas 绘制好看的背景相关推荐

  1. html画星空,html5 canvas绘制全屏的星空背景动画特效

    特效描述:html5 canvas绘制 全屏星空背景 动画特效.html5 canvas背景动画,星空动画.连线区域跟随鼠标移动,外加碰壁检测 代码结构 1. 引入JS 2. HTML代码 var m ...

  2. canvas线条背景(抽象画布可视化,利用canvas绘制多条线条,再利用多条线条同时动态发生改变,形成一幅美妙的动态图,非常惊艳!)

    canvas线条背景(抽象画布可视化,利用canvas绘制多条线条,再利用多条线条同时动态发生改变,形成一幅美妙的动态图,非常惊艳!) 动态变化中的静态截图 <!doctype html> ...

  3. Canvas 绘制背景小球、与鼠标交互的小球

    canvas入门,跟随掘金小册如何使用 Canvas 制作出炫酷的网页背景特效学习,完成一个简单的 canvas demo 下面是代码,操作解释都有注释: <!DOCTYPE html> ...

  4. 使用Canvas绘制背景图

    原文  http://www.imququ.com/post/use-canvas-as-background-image.html 最近iCloud Web的Beta版换了UI,整体风格变得和iOS ...

  5. canvas绘制多个矩形实现热区图功能

    热区图功能: 在运用后台上传一张背景图,在背景图上框选指定区域,配置对应的跳转链接或领券信息 小程序端判断用户点击位置是否在矩形框选范围内,如果在指定范围内,根据后台配置的功能进行页面跳转或领券. 运 ...

  6. canvas绘制星座(黄道十二宫)

    canvas绘制黄道十二宫星座 效果图 对照图 准备工作 开始撸代码 白嫖作者的代码 效果图 对照图 准备工作 (以下所有片段代码为手敲,难免会有语法错误,请不要复制,文末会发布全部代码) 先准备一张 ...

  7. canvas绘制微信海报分享

    前言 最近公司在做一个面向餐饮的微信小程序,公司希望在小程序中嵌入关注公众号的功能,一开始是采用官方提供的official-account,配置公众号关注组件,方便用户快捷关注公众号,但是这个组件的场 ...

  8. Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解...

    2019独角兽企业重金招聘Python工程师标准>>> 今天继续给大家分享下View的相关知识,重点有一下两点:   1.View的几种不同状态属性            2.如何根 ...

  9. canvas绘制时钟

    听了慕课网Sliav Zhou 的课程canvas绘制时钟,记录下来的代码,每句做了注解便于以后学习,原先每次边听别的课边敲码,错误百出,明明原封不动复制的代码,就会出错,还找不到原因,今天可能运气好 ...

最新文章

  1. mysql5.5.9_mysql5.5.9字符集设置
  2. Android开发之旅:环境搭建及HelloWorld
  3. ldap导入mysql_openLDAP 部署(亲测可用)
  4. DeepSORT多目标跟踪算法
  5. Struts 2基础入门
  6. 对IP专用(私有)地址的理解!
  7. 执行caffe的draw_net.py出现“GraphViz's executable dot not found”的解决方法
  8. 冲击波病毒攻击-《截获网站服务器数据》
  9. [CentOS] 打造vim环境
  10. cmd对应linux sleep命令,linux sleep命令参数及用法详解(linux休眠延迟执行命令)
  11. 安卓10可用的性能监视器_iPad 秒变监视器,无线图传设备真的有用吗?
  12. java 去重复值 按位_详解Java的按位操作符
  13. php 计算上个月,如何使用PHP计算上一个月的今天
  14. vijos 1471 线性DP+贪心
  15. Hello Guice
  16. php 将rgb转cmyk,应该如何正确的将RGB转成CMYK颜色? | 色彩管理网
  17. 5分钟快速了解区块链中的哈希值Hash(用户密码存储举例说明)?
  18. linux 使用了哪个存储阵列卡,Linux中RAID概述及配置实验
  19. 修改“IP属地“,我们说不
  20. 将本地docker镜像推送到阿里云仓库

热门文章

  1. python贪心算法最短路径_贪心算法---最短路径问题
  2. 【转载】SpringMVC的工作原理
  3. 计算机技术在足球的应用,信息可视化技术在足球技战术分析中的应用
  4. Linux下编译安装MySQL安装
  5. java 08_java08
  6. Python SortedList
  7. 计算机网络教程第5版-第3章数据链路层(数据链路层)
  8. 数字转化为字符串的两种方法
  9. 利用php写数据库—蔬菜水果干果超市案例
  10. sql语句之CONCAT 函数