• 按钮点击效果(水波纹)


    原文地址: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;
    				 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- 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>
    

      

    <!DOCTYPE html>
    <html>
    
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JS</title>
            <link rel="stylesheet" type="text/css" href="css/reset.css" />
            <script type="text/javascript" src="js/jquery-3.2.0.js"></script>
            <style type="text/css" media="screen">
                ul {
                    font-size: 0;
                    position: relative;
                    padding: 0;
                    width: 480px;
                    margin: 40px auto;
                    user-select: none;
                }
                
                li {
                    display: inline-block;
                    width: 160px;
                    height: 60px;
                    background: #E95546;
                    font-size: 16px;
                    text-align: center;
                    line-height: 60px;
                    color: white;
                    text-transform: uppercase;
                    position: relative;
                    overflow: hidden;
                    cursor: pointer;
                }
                
                .slider {
                    display: block;
                    position: absolute;
                    bottom: 0;
                    left: 0;
                    height: 4px;
                    background: #1685D3;
                    transition: all 0.5s;
                }
                
                .ripple {
                    width: 0;
                    height: 0;
                    border-radius: 50%;
                    background: rgba(255, 255, 255, 0.4);
                    -webkit-transform: scale(0);
                    -ms-transform: scale(0);
                    transform: scale(0);
                    position: absolute;
                    opacity: 1;
                }
                
                .rippleEffect {
                    -webkit-animation: rippleDrop .4s linear;
                    animation: rippleDrop .4s linear;
                }
                
                @-webkit-keyframes rippleDrop {
                    100% {
                        -webkit-transform: scale(2);
                        transform: scale(2);
                        opacity: 0;
                    }
                }
                
                @keyframes rippleDrop {
                    100% {
                        -webkit-transform: scale(2);
                        transform: scale(2);
                        opacity: 0;
                    }
                }
            </style>
    
        </head>
    
        <body>
            <ul>
                <li>项目一</li>
                <li>项目二</li>
                <li>项目三</li>
                <li class="slider"></li>
            </ul>
        </body>
        <script>
            $("ul li").click(function(e) {
    
                if($(this).hasClass('slider')) {
                    return;
                }
    
                var whatTab = $(this).index();
    
                var howFar = 160 * whatTab;
    
                $(".slider").css({
                    left: howFar + "px"
                });
    
                $(".ripple").remove();
    
                var posX = $(this).offset().left,
                    posY = $(this).offset().top,
                    buttonWidth = $(this).width(),
                    buttonHeight = $(this).height();
                console.log(posX, posY, buttonWidth, buttonHeight)
    
                $(this).append("<span class='ripple'></span>");
    
                if(buttonWidth >= buttonHeight) {
                    buttonHeight = buttonWidth;
                } else {
                    buttonWidth = buttonHeight;
                }
    
                var x = e.pageX - posX - buttonWidth / 2;
                var y = e.pageY - posY - buttonHeight / 2;
    
                $(".ripple").css({
                     buttonWidth,
                    height: buttonHeight,
                    top: y + 'px',
                    left: x + 'px'
                }).addClass("rippleEffect");
    
            });
        </script>
    
    </html>
  • 相关阅读:
    xhr单体工厂(采用分支)
    js,div垂真居中
    pycharm快捷键
    设计模式
    WebDriver API
    单元测试框架
    python操作MySQL数据库
    python读取和写入csv文件
    搭建自动化测试环境
    java中不带package和带package的编译运行方式
  • 原文地址:https://www.cnblogs.com/libin-1/p/5874585.html
Copyright © 2020-2023  润新知