Пульсирующая кнопка WhatsApp. Живая демонстрация данного виджета на этой странице. Если вы с ПК то справа внизу вы увидете пульсирующую кнопку: whatsapp. Если вы с мобильного устройства (или можете сузить окно браузера для просмотра эффекта), то кнопка расположится в нижней части экрана, по центру.
Пример
В данном примере иконка whatsapp подключается из шрифта fontawesome. Можно чуть изменить код и использовать вместо fontawesome svg иконку whatsapp или любого другого мессенджера.
Для наглядности эффекта, данный пример расположен вне рамок с кодом, обратите внимание на нижний правый угол.
<script src="https://use.fontawesome.com/cba96dfc46.js"></script>
<div type="button" class="callback-bt">
<a href="https://wa.me/77777777777?text=Я%20заинтересован%20в%20услуге" target="_blank">
<div class="text-call"><i class="fa fa-whatsapp"></i></div>
</a>
</div>
.callback-bt {
background: #25d366;
border: 0px solid #38a3fd;
border-radius: 50%;
box-shadow: 0 8px 10px rgba(56, 163, 253, 0.3);
cursor: pointer;
height: 68px;
text-align: center;
width: 68px;
position: fixed;
right: 5%;
bottom: 10%;
z-index: 999;
transition: .3s;
-webkit-animation: hoverWave linear 1s infinite;
animation: hoverWave linear 1s infinite;
}
.callback-bt .text-call {
height: 68px;
width: 68px;
border-radius: 50%;
position: relative;
overflow: hidden;
}
.callback-bt .text-call span {
text-align: center;
color: #38a3fd;
opacity: 0;
font-size: 0;
position: absolute;
right: 4px;
top: 22px;
line-height: 14px;
font-weight: 600;
text-transform: uppercase;
transition: opacity .3s linear;
font-family: 'montserrat', Arial, Helvetica, sans-serif;
}
.callback-bt .text-call:hover span {
opacity: 1;
font-size: 11px;
}
.callback-bt:hover i {}
.callback-bt:hover {
z-index: 1;
background: #188b43;
color: transparent;
transition: .3s;
}
.callback-bt:hover i {
font-size: 40px;
transition: .3s;
}
.callback-bt i {
color: #fff;
font-size: 44px;
transition: .3s;
line-height: 66px;
margin-left: -2px;
transition: .5s ease-in-out;
}
.callback-bt i {
animation: 1200ms ease 0s normal none 1 running shake;
animation-iteration-count: infinite;
-webkit-animation: 1200ms ease 0s normal none 1 running shake;
-webkit-animation-iteration-count: infinite;
}
@-webkit-keyframes hoverWave {
0% {
box-shadow: 0 8px 10px rgba(56, 163, 253, 0.3), 0 0 0 0 rgba(56, 163, 253, 0.2), 0 0 0 0 rgba(56, 163, 253, 0.2)
}
40% {
box-shadow: 0 8px 10px rgba(56, 163, 253, 0.3), 0 0 0 15px rgba(56, 163, 253, 0.2), 0 0 0 0 rgba(56, 163, 253, 0.2)
}
80% {
box-shadow: 0 8px 10px rgba(56, 163, 253, 0.3), 0 0 0 30px rgba(56, 163, 253, 0), 0 0 0 26.7px rgba(56, 163, 253, 0.067)
}
100% {
box-shadow: 0 8px 10px rgba(56, 163, 253, 0.3), 0 0 0 30px rgba(56, 163, 253, 0), 0 0 0 40px rgba(56, 163, 253, 0.0)
}
}
@keyframes hoverWave {
0% {
box-shadow: 0 8px 10px rgba(56, 163, 253, 0.3), 0 0 0 0 rgba(56, 163, 253, 0.2), 0 0 0 0 rgba(56, 163, 253, 0.2)
}
40% {
box-shadow: 0 8px 10px rgba(56, 163, 253, 0.3), 0 0 0 15px rgba(56, 163, 253, 0.2), 0 0 0 0 rgba(56, 163, 253, 0.2)
}
80% {
box-shadow: 0 8px 10px rgba(56, 163, 253, 0.3), 0 0 0 30px rgba(56, 163, 253, 0), 0 0 0 26.7px rgba(56, 163, 253, 0.067)
}
100% {
box-shadow: 0 8px 10px rgba(56, 163, 253, 0.3), 0 0 0 30px rgba(56, 163, 253, 0), 0 0 0 40px rgba(56, 163, 253, 0.0)
}
}
/* animations icon */
@keyframes shake {
0% {
transform: rotateZ(0deg);
-ms-transform: rotateZ(0deg);
-webkit-transform: rotateZ(0deg);
}
10% {
transform: rotateZ(-30deg);
-ms-transform: rotateZ(-30deg);
-webkit-transform: rotateZ(-30deg);
}
20% {
transform: rotateZ(15deg);
-ms-transform: rotateZ(15deg);
-webkit-transform: rotateZ(15deg);
}
30% {
transform: rotateZ(-10deg);
-ms-transform: rotateZ(-10deg);
-webkit-transform: rotateZ(-10deg);
}
40% {
transform: rotateZ(7.5deg);
-ms-transform: rotateZ(7.5deg);
-webkit-transform: rotateZ(7.5deg);
}
50% {
transform: rotateZ(-6deg);
-ms-transform: rotateZ(-6deg);
-webkit-transform: rotateZ(-6deg);
}
60% {
transform: rotateZ(5deg);
-ms-transform: rotateZ(5deg);
-webkit-transform: rotateZ(5deg);
}
70% {
transform: rotateZ(-4.28571deg);
-ms-transform: rotateZ(-4.28571deg);
-webkit-transform: rotateZ(-4.28571deg);
}
80% {
transform: rotateZ(3.75deg);
-ms-transform: rotateZ(3.75deg);
-webkit-transform: rotateZ(3.75deg);
}
90% {
transform: rotateZ(-3.33333deg);
-ms-transform: rotateZ(-3.33333deg);
-webkit-transform: rotateZ(-3.33333deg);
}
100% {
transform: rotateZ(0deg);
-ms-transform: rotateZ(0deg);
-webkit-transform: rotateZ(0deg);
}
}
@-webkit-keyframes shake {
0% {
transform: rotateZ(0deg);
-ms-transform: rotateZ(0deg);
-webkit-transform: rotateZ(0deg);
}
10% {
transform: rotateZ(-30deg);
-ms-transform: rotateZ(-30deg);
-webkit-transform: rotateZ(-30deg);
}
20% {
transform: rotateZ(15deg);
-ms-transform: rotateZ(15deg);
-webkit-transform: rotateZ(15deg);
}
30% {
transform: rotateZ(-10deg);
-ms-transform: rotateZ(-10deg);
-webkit-transform: rotateZ(-10deg);
}
40% {
transform: rotateZ(7.5deg);
-ms-transform: rotateZ(7.5deg);
-webkit-transform: rotateZ(7.5deg);
}
50% {
transform: rotateZ(-6deg);
-ms-transform: rotateZ(-6deg);
-webkit-transform: rotateZ(-6deg);
}
60% {
transform: rotateZ(5deg);
-ms-transform: rotateZ(5deg);
-webkit-transform: rotateZ(5deg);
}
70% {
transform: rotateZ(-4.28571deg);
-ms-transform: rotateZ(-4.28571deg);
-webkit-transform: rotateZ(-4.28571deg);
}
80% {
transform: rotateZ(3.75deg);
-ms-transform: rotateZ(3.75deg);
-webkit-transform: rotateZ(3.75deg);
}
90% {
transform: rotateZ(-3.33333deg);
-ms-transform: rotateZ(-3.33333deg);
-webkit-transform: rotateZ(-3.33333deg);
}
100% {
transform: rotateZ(0deg);
-ms-transform: rotateZ(0deg);
-webkit-transform: rotateZ(0deg);
}
}
@media(max-width:768px) {
.review-list__container {
display: grid;
grid-template-columns: inherit;
grid-gap: inherit;
}
.callback-bt {
width: 100%;
border-radius: 0;
bottom: 0;
left: 0;
box-shadow: none;
transition: none;
animation: none;
}
.callback-bt i {
color: #fff;
font-size: 34px;
transition: .3s;
line-height: 48px;
margin-left: -2px;
transition: .5s ease-in-out;
}
.callback-bt:after {
content: 'Написать в WhatsApp';
font-size: 20px;
color: #fff;
margin-top: -56px;
position: absolute;
left: 66px;
}
.callback-bt {
cursor: pointer;
height: 52px;
}
.callback-bt a {
position: relative;
z-index: 99999;
width: 100%;
display: block;
}
}