Стилизация “волны” в кнопке при клике

247
08 апреля 2018, 22:13

Как создать эффект волны при клике на кнопку?

Answer 1

Навскидку написал скрипт, который анимирует волну от места клика и работает в Safari:

var links = document.querySelectorAll("button"); 
for(var i = 0; i < links.length; i++){ 
links[i].addEventListener('click', function (event) { 
    event.preventDefault(); 
 
    // Remove any old one 
    var ripple = document.querySelector('.ripple'); 
    if (ripple) { 
        ripple.remove(); 
    } 
 
    // Setup 
    var buttonWidth = this.offsetWidth, 
        buttonHeight = this.offsetHeight; 
 
    // Make it round! 
    if(buttonWidth >= buttonHeight) { 
        buttonHeight = buttonWidth; 
    } else { 
        buttonWidth = buttonHeight; 
    } 
 
    // Get the center of the element 
    var x = event.offsetX==undefined?event.layerX:event.offsetX - buttonWidth / 2, 
        y = event.offsetY==undefined?event.layerY:event.offsetY - buttonHeight / 2; 
 
    // Add the element 
    var span = document.createElement('span'); 
    span.className = 'ripple'; 
    s = span.style; 
    s.width = buttonWidth + 'px'; 
    s.height = buttonHeight + 'px'; 
    s.top = y + 'px'; 
    s.left = x + 'px'; 
    this.appendChild(span); 
}); 
}
button { 
  display: block; 
  color: #fff; 
  background: #232323; 
  padding: 0 50px; 
  position: relative; 
  overflow: hidden; 
  font: 700 18px/46px 'Arial'; 
  border: none; 
  outline: none; 
  user-select: none; 
  cursor: pointer; 
  transition: background .25s; 
} 
button:hover, 
button.active { 
  background: #444; 
} 
.ripple { 
  width: 0; 
  height: 0; 
  border-radius: 50%; 
  background: rgba(255,255,255,0.4); 
  transform: scale(0); 
  position: absolute; 
  opacity: 1; 
  animation: ripple 0.5s linear; 
} 
@keyframes ripple { 
  100% { 
   transform: scale(2); 
   opacity: 0; 
  } 
}
   <button>Кнопка</button>

Answer 2

Приведу пример на CSS:

button{ 
  position: relative; 
  overflow: hidden; 
      border: none; 
    cursor: pointer; 
    color: white; 
    padding: 15px 40px; 
    border-radius: 2px; 
    font-size: 22px; 
    box-shadow: 2px 2px 4px rgba(0, 0, 0, .4); 
    background: #167dad; 
} 
 
button:after { 
  content: ''; 
  position: absolute; 
  top: 50%; 
  left: 50%; 
  width: 5px; 
  height: 5px; 
  background: rgba(255, 255, 255, .5); 
  opacity: 0; 
  border-radius: 100%; 
  transform: scale(1, 1) translate(-50%); 
  transform-origin: 50% 50%; 
} 
 
@keyframes ripple { 
  0% { 
    transform: scale(0, 0); 
    opacity: 1; 
  } 
  20% { 
    transform: scale(25, 25); 
    opacity: 1; 
  } 
  100% { 
    opacity: 0; 
    transform: scale(40, 40); 
  } 
} 
 
button:focus:not(:active)::after { 
  animation: ripple 1s ease-out; 
}
<button>Кнопка</button>

READ ALSO
Как вставить onclick в echo

Как вставить onclick в echo

как сделать так, что бы onclick="$('#exampleModal1')arcticmodal()" работал в echo?

276
Telegram бот на Java

Telegram бот на Java

Подскажите, есть Telegram бот написанный на Java, использую официальное API, также же имеется БД с chatID (ID-пользователей) данного ботаЕсть задумка...

285
Почему условие в цикле while не выполняется?

Почему условие в цикле while не выполняется?

Всем приветНаписал свою первую программу - "Камень, ножницы, бумага"

241