افکت زیبا برای دکمه - Distorted Button Effects (نمونه آخر)

زمان مطالعه: ۴ دقیقه
۲۷ آبان ۱۳۹۶

در این مطلب نمونه 10 و آخر از افکت زیبا برای دکمه یا Button با عنوان Distorted Button Effects رو در اختیارتون میزارم و امیدوارم که بدردتون بخوره و بتونین از اون در سایتتون استفاده کنید. زمانی که بر روی دکمه های مورد نظر کلیک میکنید، به زیبایی تغییر شکل میدن و افکت زیبایی رو به نمایش میزارن.

همونطور که در دمو مشاهده کردید، یک دکمه بنام Play وجود داره و زمانی که بر روی اون کلیک میکنید، یک حالت موجی زیبا شبیه به پخش موسیقی بر روی اون نمایش داده میشه و زمانی ماوستون رو بر روی دکمه میبرید، حالت پخش موجی دکمه خودش رو نشون میده. برای این حالت از SVG استفاده شده است. میتونین کد مربوط به این افکت رو در زیر مشاهده کنید.

کدهای مربوط به این افکت

کد HTML :

<section class="section">
	<h3 class="section__title">10</h3>
	<svg xmlns="http://www.w3.org/2000/svg" version="1.1" class="svg-filters">
		<defs>
			<filter id="filter-music">
				<feTurbulence type="fractalNoise" baseFrequency="0.000001" numOctaves="1" result="warp" />
				<feOffset dx="0" dy="-90" result="warpOffset" />
				<feDisplacementMap xChannelSelector="R" yChannelSelector="G" scale="30" in="SourceGraphic" in2="warpOffset" />
			</filter>
		</defs>
	</svg>
	<button id="component-10" class="button button--10">
		<span class="button__text">Play</span>
		<span class="button__bg"></span>
	</button>
</section>

کد CSS :

*,
*:after,
*:before {
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
body {
  font-family: Avenir, 'Helvetica Neue', 'Lato', 'Segoe UI', Helvetica, Arial, sans-serif;
  color: #222;
  background: #f6f6f6;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.section {
	width: 400px;
	height: 400px;
	margin: 0 auto;
}

.section__title {
  font-size: 5em;
  font-weight: 900;
  letter-spacing: -0.05em;
  margin: 0 0 1em 0;
  color: #ddd;
  position: relative;
  text-align: left;
  width: 100%;
}

.section__title::before {
  content: '';
  position: absolute;
  top: 1.15em;
  width: 40%;
  height: 0.1em;
  background: #ddd;
  left: 0;
}

.svg-filters {
  position: absolute;
  visibility: hidden;
  width: 1px;
  height: 1px;
}

.button {
	cursor: pointer;
}

.button--1, .button--1 .button__bg, .button--2, .button--4, .button--4 .button__bg, .button--5, .button--6, .button--7, .button--8, .button--9, .button--10 {
  -webkit-font-smoothing: antialiased;
  background-color: #222;
  border: none;
  display: inline-block;
  font-family: 'Montserrat', sans-serif;
  font-size: 0.85em;
  font-weight: 700;
  text-decoration: none;
  user-select: none;
  letter-spacing: 0.1em;
  color: white;
  padding: 20px 40px;
  text-transform: uppercase;
  transition: background-color 0.1s ease-out;
}

.button--1:hover, .button--1 .button__bg:hover, .button--2:hover, .button--4:hover, .button--4 .button__bg:hover, .button--5:hover, .button--6:hover, .button--7:hover, .button--8:hover, .button--9:hover, .button--10:hover {
  background-color: #2CD892;
  color: #fff;
}

.button--1:focus, .button--1 .button__bg:focus, .button--2:focus, .button--4:focus, .button--4 .button__bg:focus, .button--5:focus, .button--6:focus, .button--7:focus, .button--8:focus, .button--9:focus, .button--10:focus {
  outline: none;
  color: #fff;
}

/* Indivudual styles */
.button--10 {
  position: relative;
  background: none;
  z-index: 0;
  width: 135px;
}

.button--10:hover {
  background: none;
}

.button--10:hover .button__bg {
  background: #2CD892;
}

.button--10 .button__bg {
  transform: translateZ(0);
  outline: 90px solid transparent !important;
  background: #222;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: -1;
  -webkit-transition: background 0.1s ease-out;
  -moz-transition: background 0.1s ease-out;
  transition: background 0.1s ease-out;
  border-radius: 40px;
}

کد JS:

در این مطلب از TweenMax استفاده شده است.

function getRandom(min, max){
  return Math.random() * (max - min) + min;
}

// Remove click on button for demo purpose
document.querySelector('.button').addEventListener('click', function(e) {
	e.preventDefault();
});

initBt10();

// Button 10
function initBt10() {
  var bt = document.querySelectorAll('#component-10')[0];
  var btTxt = bt.querySelector('.button__text');
  var btBg = bt.querySelector('.button__bg');
  var isPlaying = false;
  var turbVal = { val: 0.000001 };
  var turbValX = { val: 0.000001 };
  var turb = document.querySelectorAll('#filter-music feTurbulence')[0];
  var btTl = new TimelineLite({ paused: true, onUpdate: function() {
    turb.setAttribute('baseFrequency', turbVal.val + ' ' + turbValX.val);
  },
  onComplete: function() { 
    btTl.reverse();
  }, onReverseComplete: function() {
    btTl.restart();
  } });

  btTl.to(turbValX, 0.4, { val: 0.04, ease: Power0.easeNone }, 0);
  btTl.to(turbVal, 0.1, { val: 0.2 ,ease: Power0.easeNone }, 0);

  bt.addEventListener('click', function() {
    if(isPlaying) {
      btTxt.textContent = 'Play';
      btTl.pause()
      var btTl2 = new TimelineLite({ onUpdate: function() {
        turb.setAttribute('baseFrequency', turbVal.val + ' ' + turbValX.val);
      } });
      btTl2.to(turbVal, 0.1, { val: 0.000001 });
      btTl2.to(turbValX, 0.1, { val: 0.000001 }, 0);
      isPlaying = false;
      btBg.style.filter = 'none';
    } else {
      btTxt.textContent = 'Pause';
      btTl.play();
      isPlaying = true;
      btBg.style.filter = 'url(#filter-music)';
    }
  });
}

امیدوارم خوشتون بیاد.

موفق باشید. یا علی

Source

نویسنده
بسیار به طراحی وب علاقمندم و به سرعت در حال یادگیری تمام مباحث پیشرفته هستم و دوست دارم که به دیگران هم یاد بدهم.

نظرات کاربران

اولین دیدگاه این پست رو تو بنویس !

ارسال دیدگاه
خوشحال میشیم دیدگاه و یا تجربیات خودتون رو با ما در میون بذارید :

 
گزارش مشکل