zoukankan      html  css  js  c++  java
  • css涟漪点击效果(此博客仅供个人记录使用)

    第一种:纯css实现:

    .ripple {
        position: relative;
        overflow: hidden;
    }
    .ripple:after {
        content: "";
        display: block;
        position: absolute;
        width: 100%;
        height: 100%;
        top: 0;
        left: 0;
        pointer-events: none;
        background-image: radial-gradient(circle, #666 10%, transparent 10.01%);
        background-repeat: no-repeat;
        background-position: 50%;
        transform: scale(10, 10);
        opacity: 0;
        transition: transform .3s, opacity .5s;
    }
    .ripple:active:after {
        transform: scale(0, 0);
        opacity:.3;
        transition: 0s;
    }

    给需要的标签添加class为ripple搞定 ,但是你会发现效果不佳 每次都从中间往外的位置扩张的效果 ,能不能冲鼠标点击的地方往外呢,就要集合js实现,(第二种实现);

     

      

    第二种方法:css + js 实现:(Material-UI效果)

    css部分:

    .ripple{
        background: #1ABC9C;
       width:100%;
       height:100px;
    
        color: #fff; 
        position:relative;
        cursor:pointer;
        display:inline-block;
        overflow:hidden;
        text-align: center;
        -webkit-tap-highlight-color:transparent;
        z-index:1;
    }
    .ripple .ripple-animation{
        position:absolute;
        border-radius:50%;
        width:25px;
        height:25px;
        opacity:0;
        background:rgba(255,255,255,0.3);
        transition:all 0.7s ease-out;
        transition-property:transform, opacity, -webkit-transform;
        -webkit-transform:scale(0);
        transform:scale(0);
        pointer-events:none
    }

     js:部分:

    <script>
         // 点击涟漪效果
         document.addEventListener('DOMContentLoaded',function(){
              let duration = 750;
              // 样式string拼凑
              let forStyle = function(position){
                let cssStr = ''
                  for( let key in position){
                      // if(position.hasOwnProperty(key)){ 
                          cssStr += key+':'+position[key]+';'
                      // }
                  }
                  return cssStr;
              }
              // 获取鼠标点击位置
              let forRect = function(target){
                let position = {
                  top:0,
                  left:0
                }
                let ele = document.documentElement
                  typeof target.getBoundingClientRect != 'undefined'  && (position = target.getBoundingClientRect())
                  return {
                      top: position.top + window.pageYOffset - ele.clientTop,
                      left: position.left + window.pageXOffset - ele.clientLeft
                  }
              }
    
              let show = function(event){
                  let pDiv = event.target
                  let cDiv = document.createElement('div');
                      pDiv.appendChild(cDiv)
                  let rectObj = forRect(pDiv)
                  let height = event.pageY - rectObj.top
                  let left = event.pageX - rectObj.left
                  let scale = 'scale(' + pDiv.clientWidth / 100 * 10 + ')'
                  let position = {
                      top: height+'px',
                      left: left+'px'
                  }
                  
    
                  cDiv.className = cDiv.className + " ripple-animation",
                      cDiv.setAttribute("style", forStyle(position)),
                      position["-webkit-transform"] = scale,
                      position["-moz-transform"] = scale,
                      position["-ms-transform"] = scale,
                      position["-o-transform"] = scale,
                      position.transform = scale,
                      position.opacity = "1",
                      position["-webkit-transition-duration"] = duration + "ms",
                      position["-moz-transition-duration"] = duration + "ms",
                      position["-o-transition-duration"] = duration + "ms",
                      position["transition-duration"] = duration + "ms",
                      position["-webkit-transition-timing-function"] = "cubic-bezier(0.250, 0.460, 0.450, 0.940)",
                      position["-moz-transition-timing-function"] = "cubic-bezier(0.250, 0.460, 0.450, 0.940)",
                      position["-o-transition-timing-function"] = "cubic-bezier(0.250, 0.460, 0.450, 0.940)",
                      position["transition-timing-function"] = "cubic-bezier(0.250, 0.460, 0.450, 0.940)",
                      cDiv.setAttribute("style", forStyle(position))
    
    
                      let finishStyle = {
                          opacity: 0,
                          "-webkit-transition-duration": duration + "ms",
                          "-moz-transition-duration": duration + "ms",
                          "-o-transition-duration": duration + "ms",
                          "transition-duration": duration + "ms",
                          "-webkit-transform" : scale,
                          "-moz-transform" : scale,
                          "-ms-transform" : scale,
                          "-o-transform" : scale,
                          top: height + "px",
                          left: left + "px",
                      }
    
    
    
                  setTimeout(() => {
                      cDiv.setAttribute("style", forStyle(finishStyle))
                      setTimeout(() =>  pDiv.removeChild(cDiv),duration)
                  },100)
              }
    
                for (let i = 0; i < document.querySelectorAll('.ripple').length; i++) {
                  document.querySelectorAll('.ripple')[i].addEventListener('click',function(e){
                      show(e)
                  })   
                }
              // addEventListener('click',function(e){
              //   let target = e.target.classList
              //   if (target && target.length) {
              //     for (let i = 0; i < target.length; i++) {
              //       (target[i] === 'ripple') && show(e)
              //     }
              //   } 
              // })
          })
      </script>

    然后在所需要点击效果的标签上加上class="ripple"就可以了

  • 相关阅读:
    基于HT for Web矢量实现3D叶轮旋转
    基于HT for Web矢量实现2D叶轮旋转
    HT for Web列表和3D拓扑组件的拖拽应用
    基于HT for Web矢量实现HTML5文件上传进度条
    Java 8 VM GC Tunning Guide Charter 5
    Java 8 VM GC Tunning Guide Charter 6
    Java 8 VM GC Tunning Guide Charter 7-8-b
    Java 8 VM GC Tunning Guild Charter 9-b
    java文档 第十一章 其他考量-b
    iOS点击cell查看大图,点击大图还原小图-b
  • 原文地址:https://www.cnblogs.com/gitwusong/p/13887380.html
Copyright © 2011-2022 走看看