文档章节

分享一款特效超牛逼的js

小致Daddy
 小致Daddy
发布于 2016/12/10 21:04
字数 565
阅读 1.4K
收藏 1

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

话不多说,见图

看见这些线条了嘛,就是使用js在页面进行绘制的。引入一个JS即可[必须在<body>里面引入,在head里面引入无效]

! 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]; //当前加载的script
		return {
			l: script_len, //长度,用于生成id用
			z: get_attribute(script, "zIndex", -1), //z-index
			o: get_attribute(script, "opacity", 0.5), //opacity
			c: get_attribute(script, "color", "0,0,0"), //color
			n: 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 all_array = [current_point].concat(random_lines);
		var e, i, d, x_dist, y_dist, dist; //临时节点
		//遍历处理每一个点
		random_lines.forEach(function(r) {
			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 = 0; i < all_array.length; i++) {
				e = all_array[i];
				//不是当前点
				if (r !== e && null !== e.x && null !== e.y) {
						x_dist = r.x - e.x, //x轴距离 l
						y_dist = r.y - e.y, //y轴距离 n
						dist = x_dist * x_dist + y_dist * y_dist; //总距离, m
					dist < 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());
				}
			}
			all_array.splice(all_array.indexOf(r), 1);

		}), frame_func(draw_canvas);
	}
	//创建画布,并添加到body中
	var the_canvas = document.createElement("canvas"), //画布
		config = get_config_option(), //配置
		canvas_id = "c_n" + config.l, //canvas id
		context = 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, //当前鼠标x
			y: null, //当前鼠标y
			max: 20000
		};
	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 //沾附距离
		});
	}
	//0.1秒后绘制
	setTimeout(function() {
		draw_canvas();
	}, 100);
}();

 

© 著作权归作者所有

小致Daddy

小致Daddy

粉丝 207
博文 604
码字总数 622330
作品 0
济南
技术主管
私信 提问
加载中

评论(0)

8款基于Jquery的WEB前端动画特效

1.超炫酷的30个jQuery按钮悬停动画 按钮插件是最常见的jQuery插件之一,因为它用途广泛,而且配置起来最为方便。今天我们要分享的是30个超炫酷的jQuery悬停按钮动画,当我们将鼠标滑过按钮时...

帅的相对论
2017/05/12
0
0
推荐十款来自极客标签的超棒前端特效[第十一期]

来源:GBin1.com 本周,我们带来了极客社区推荐的10款前端特效,仍然是非常有趣的小动态效果的页面生成。喜欢的可以直接将我们的在线调试代码插入,希望可以带给大家一些更好的帮助和不同以往...

gbin1
2013/08/13
6
0
推荐十款来超棒前端特效

来源:GBin1.com 本周,我们带来了极客社区推荐的10款前端特效,仍然是非常有趣的小动态效果的页面生成。喜欢的可以直接将我们的在线调试代码插入,希望可以带给大家一些更好的帮助和不同以往...

gbin1
2013/08/27
1.7K
0
推荐10款超棒的前端特效

推荐10款免费的前端特效给大家,可以直接获取代码插入使用! 使用CSS和javascript实现的指针式手表效果 指针式手表效果,无论是计时还是时间,都是网站非常好的选择! GBdebug在线调试地址:...

gbin1
2013/08/21
299
0
《基于JQuery和CSS的特效整理》系列分享专栏

《基于JQuery和CSS的特效整理》已整理成PDF文档,点击可直接下载至本地查阅 https://www.webfalse.com/read/201724.html 文章 一款基于jQuery的颜色拾取器 分享一款基于jQuery的QQ表情插件 ...

kaixin_code
2018/11/04
82
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么中国开发不出流行的操作系统和编程语言

为什么中国开发不出流行的操作系统和编程语言 Stitch/2020-2-21 引子 知乎有两个帖子很有意思, 中国能不能写出操作系统? 中国为什么没有自己的编程语言 看了很多回到,有的答案写的很认真,...

osc_oq0m8kxk
23分钟前
15
0
干货,比较全面的c#.net公共帮助类(Common.Utility)

Common.Utility 初衷 网上有各式各样的帮助类,公共类,但是比较零碎,经常有人再群里或者各种社交账号上问我有没有这个helper, 那个helper,于是萌生了收集全部helper的念头,以便日后使用....

osc_qedw9vk0
24分钟前
5
0
flutter开发如何修改APP的名称和图标

1.安卓 2.修改APP名,不是软件里面显示的,而是桌面上应用名称 路径 /android/app/src/main/AndroidManifest.xml android:label="flutterapp" 改换这里的值 3.修改APP图标 路径 /android/app......

一代码农码一代
25分钟前
21
0
PDF文件水印怎么去掉?迅捷PDF编辑器PC的操作方法

PDF文件水印怎么去掉?现在PDF文件被广泛应用于各个办公场景之中,PDF文件的修改也是我们经常讨论的话题。编辑文件时,我们需要使用pdf编辑器。那么,如果文件中有水印,如何删除水印?应该有...

玛哈菲亚
25分钟前
23
0
基于 abp vNext 和 .NET Core 开发博客项目 - 用AutoMapper搞定对象映射

上一篇文章(https://www.cnblogs.com/meowv/p/12961014.html)集成了定时任务处理框架Hangfire,完成了一个简单的定时任务处理解决方案。 本篇紧接着来玩一下AutoMapper,AutoMapper可以很方便...

osc_tzzfwr6n
25分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部