阅读 249

5分钟实现鼠标点击波纹特效 html+css+js

先看效果,最后有完整源码:

在这里插入图片描述

实现:

  1. 定义标签:
 <div class="card">
        <img src="3.3.png" alt="x" width="100%">
        <h3>北极光之夜</h3>
        <p >
            生活下去,错误下去,堕落下去,为胜利而欢呼,从生命中重新创造生命!
        </p>
    </div>
复制代码
  1. 卡片和文字的基本样式:
 .card{
            width: 200px;
            height: 300px;
            box-shadow: 1px 1px 5px #555;
            cursor: pointer;
            background-color: rgb(243, 243, 243);
            position: relative;
            overflow: hidden;
        }
        .card h3,.card p{
            padding: 5px;
            text-align: center;
            font-family: 'fangsong';
            font-weight: bold;
            user-select: none;
        }
复制代码

cursor: pointer; 鼠标样式为小手。 overflow: hidden; 子元素大小超出卡片区域的被隐藏。 user-select: none; 文本不可选中。

  1. js部分,见注释。
 <script>
         /* 获取元素 */
         var card = document.querySelector('.card');
          /* 绑定点击事件 */
         card.addEventListener('click',function(e){
              /* 获取鼠标点击的水平位置 */
             let x = e.clientX - this.offsetLeft;
             /* 获取鼠标点击的垂直位置 */
             let y = e.clientY - this.offsetTop;
              /* 创建一个span元素 */
             let circle = document.createElement('span');
             /* 为span元素添加定位的 left 属性 */
             circle.style.left = x + 'px';
              /* 为span元素添加定位的 top 属性 */
             circle.style.top = y + 'px';
              /* 卡片添加创建好的span元素 */
             card.appendChild(circle);
             /* 1s后移除span元素 */
             setInterval(function(){
                 circle.remove();
             },1000)

         })

    </script>
复制代码
  1. 添加上一步创建的 span 元素的css样式
  .card span{
            position: absolute;
            transform: translate(-50%,-50%);
  
            background-color: rgb(255, 254, 254);
            border-radius: 50%;
            animation: big 1s  ;
        }
        @keyframes big{
            0%{
                width: 0px;
            height: 0px;
            opacity: 1;
            }
            100%{
                width: 400px;
            height: 400px;
            opacity: 0;
            }
        }
复制代码

position: absolute; 绝对定位。 transform: translate(-50%,-50%); 向左和上移动自身宽度和高度的一半。 animation: big 1s; 定义动画,刚好1s完成动画 。 opacity: 1; 不透明。 opacity: 0; 透明。

完整源码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        body{
            height: 100vh;
            display: flex;
            justify-content: center;
            align-items: center;
            background-image: radial-gradient(white,black);
        }
        .card{
            width: 200px;
            height: 300px;
            box-shadow: 1px 1px 5px #555;
            cursor: pointer;
            background-color: rgb(243, 243, 243);
            position: relative;
            overflow: hidden;
        }
        .card h3,.card p{
            padding: 5px;
            text-align: center;
            font-family: 'fangsong';
            font-weight: bold;
            user-select: none;
        }
        .card span{
            position: absolute;
            transform: translate(-50%,-50%);
  
            background-color: rgb(255, 254, 254);
            border-radius: 50%;
            animation: big 1s  ;
        }
        @keyframes big{
            0%{
                width: 0px;
            height: 0px;
            opacity: 1;
            }
            100%{
                width: 400px;
            height: 400px;
            opacity: 0;
            }
        }
    </style>
</head>
<body>
    <div class="card">
        <img src="3.3.png" alt="x" width="100%">
        <h3>北极光之夜</h3>
        <p >
            生活下去,错误下去,堕落下去,为胜利而欢呼,从生命中重新创造生命!
        </p>
    </div>
    <script>
         
         var card = document.querySelector('.card');
         card.addEventListener('click',function(e){
             
             let x = e.clientX - this.offsetLeft;
             let y = e.clientY - this.offsetTop;

             let circle = document.createElement('span');
             circle.style.left = x + 'px';
             circle.style.top = y + 'px';
             
             card.appendChild(circle);

             setInterval(function(){
                 circle.remove();
             },1000)

         })

    </script>
</body>
</html>
复制代码

总结:

不止卡片,在按钮上,菜单上等等都可以用。 其它文章~: 简约时钟特效 html+css+js 赛博朋克风格按钮 html+css 响应式卡片悬停效果 html+css 水波加载动画 html+css 导航栏滚动渐变效果 html+css+js 书本翻页 html+css 3D立体相册 html+css 炫彩流光按钮 html+css 记一些css属性总结(一) Sass总结笔记 ......等等

在这里插入图片描述

文章分类
前端
文章标签