首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >圆圈内的涟漪效应

圆圈内的涟漪效应
EN

Stack Overflow用户
提问于 2018-08-05 03:08:38
回答 1查看 433关注 0票数 2

我正在尝试自己构建连锁反应,如下所示:

代码语言:javascript
复制
function onMenuClick(e) {
      var dom = e.currentTarget;
      var x = e.pageX;
      var y = e.pageY;
      var rippleDiv = document.createElement("div");
      var domTokenList = rippleDiv.classList;
      domTokenList.add("ripple");
      rippleDiv.setAttribute("style", "top:" + (String(y) + ("px; left:" + (String(x) + "px;"))));
      dom.appendChild(rippleDiv);
      setTimeout((function () {
        dom.removeChild(rippleDiv);
        return /* () */0;
      }), 900);
      return /* () */0;
    }
代码语言:javascript
复制
   body {
      background-color: coral;
    }

    .topbar-menu-on-mobile {
      display: flex;
      border-radius: 50%;
      width: 50px;
      height: 50px;
      align-items: center;
      justify-content: center;
      background-color: #24344b;
      margin-left: 15px;
      overflow: hidden;
    }

    .fa-bars {
      color: #2db9ba;
    }

    .ripple {
      position: absolute;
      opacity: 0;
      border-radius: 50%;
      width: 2px;
      height: 2px;
      background-color: #FFFFFF;
      -webkit-animation-duration: 1s;
      animation-duration: 1s;
      -webkit-animation-name: ripple;
      animation-name: ripple;
    }

    @keyframes ripple {
      0% {
        opacity: 1;
      }
      100% {
        transform: scale(165);
      }
    }
代码语言:javascript
复制
<!DOCTYPE html>
<html>

<head>
  <title>Ripple test</title>
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ"
    crossorigin="anonymous" />

</head>

<body>
  <a onclick="onMenuClick(event)" class="topbar-menu-on-mobile">

  </a>

</body>

</html>

当我点击圆圈时,涟漪效果超过了圆圈。我怎样才能防止它呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-05 03:17:34

position:relative添加到a中,以便可以使用overflow:hidden,因为波纹div将相对于a定位。然后根据元素的位置调整JS代码以纠正div的位置。

代码语言:javascript
复制
function onMenuClick(e) {
  var dom = e.currentTarget;
  var elemRect = dom.getBoundingClientRect()
  var x = e.pageX - elemRect.left;
  var y = e.pageY - elemRect.top;
  var rippleDiv = document.createElement("div");
  var domTokenList = rippleDiv.classList;
  domTokenList.add("ripple");
  rippleDiv.setAttribute("style", "top:" + (String(y) + ("px; left:" + (String(x) + "px;"))));
  dom.appendChild(rippleDiv);
  setTimeout((function() {
    dom.removeChild(rippleDiv);
    return /* () */ 0;
  }), 900);
  return /* () */ 0;
}
代码语言:javascript
复制
body {
  background-color: coral;
}

.topbar-menu-on-mobile {
  display: flex;
  border-radius: 50%;
  width: 50px;
  height: 50px;
  align-items: center;
  justify-content: center;
  background-color: #24344b;
  margin-left: 15px;
  overflow: hidden;
  position:relative;
}


.ripple {
  position: absolute;
  opacity: 0;
  border-radius: 50%;
  width: 2px;
  height: 2px;
  background-color: #FFFFFF;
  animation-duration: 1s;
  animation-name: ripple;
}

@keyframes ripple {
  0% {
    opacity: 1;
  }
  100% {
    transform: scale(165);
  }
}
代码语言:javascript
复制
<a onclick="onMenuClick(event)" class="topbar-menu-on-mobile">

</a>

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51688770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档