码迷,mamicode.com
首页 > 其他好文 > 详细

按钮点击效果(水波纹)

时间:2016-09-15 12:18:26      阅读:437      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

原文地址:http://www.cnblogs.com/ys-ys/p/5874343.html

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
		<title>按钮水波纹</title>
		<style type="text/css">
			* {
				box-sizing: border-box;
				outline: none;
			}
			
			body {
				font-family: ‘Open Sans‘;
				font-size: 100%;
				font-weight: 300;
				line-height: 1.5em;
				text-align: center;
			}
			
			.btn {
				border: none;
				display: inline-block;
				color: white;
				overflow: hidden;
				margin: 1rem;
				padding: 0;
				width: 150px;
				height: 40px;
				text-align: center;
				line-height: 40px;
				border-radius: 5px;
			}
			
			.btn.color-1 {
				background-color: #426fc5;
			}
			
			.btn-border.color-1 {
				background-color: transparent;
				border: 2px solid #426fc5;
				color: #426fc5;
			}
			
			.material-design {
				position: relative;
			}
			
			.material-design canvas {
				opacity: 0.25;
				position: absolute;
				top: 0;
				left: 0;
			}
			
			.container {
				align-content: center;
				align-items: flex-start;
				display: flex;
				flex-direction: row;
				flex-wrap: wrap;
				justify-content: center;
				margin: 0 auto;
				max-width: 46rem;
			}
		</style>
		<script type="text/javascript">
			window.onload = function() {
				var canvas = {},
					centerX = 0,
					centerY = 0,
					color = ‘‘,
					containers = document.getElementsByClassName(‘material-design‘),
					context = {},
					element = {},
					radius = 0,
					// 根据callback生成requestAnimationFrame动画
					requestAnimFrame = function() {
						return(
							window.requestAnimationFrame ||
							window.mozRequestAnimationFrame ||
							window.oRequestAnimationFrame ||
							window.msRequestAnimationFrame ||
							function(callback) {
								window.setTimeout(callback, 1000 / 60);
							}
						);
					}(),
					// 为每个指定元素生成canves
					init = function() {
						containers = Array.prototype.slice.call(containers);
						for(var i = 0; i < containers.length; i += 1) {
							canvas = document.createElement(‘canvas‘);
							canvas.addEventListener(‘click‘, press, false);
							containers[i].appendChild(canvas);
							canvas.style.width = ‘100%‘;
							canvas.style.height = ‘100%‘;
							canvas.width = canvas.offsetWidth;
							canvas.height = canvas.offsetHeight;
						}
					},
					// 点击并且获取需要的数据,如点击坐标、元素大小、颜色
					press = function(event) {
						color = event.toElement.parentElement.dataset.color;
						element = event.toElement;
						context = element.getContext(‘2d‘);
						radius = 0;
						centerX = event.offsetX;
						centerY = event.offsetY;
						context.clearRect(0, 0, element.width, element.height);
						draw();
					},
					// 绘制圆形,并且执行动画
					draw = function() {
						context.beginPath();
						context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);
						context.fillStyle = color;
						context.fill();
						radius += 2;
						// 通过判断半径小于元素宽度,不断绘制 radius += 2 的圆形
						if(radius < element.width) {
							requestAnimFrame(draw);
						}
					};

				init();
			}
		</script>
	</head>

	<body>
		<a class="btn color-1 material-design" data-color="#2f5398">Press me!</a>
	</body>

</html>

  

按钮点击效果(水波纹)

标签:

原文地址:http://www.cnblogs.com/libin-1/p/5874585.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!