Форма входа

    Бесплатный раздел

    Уважаемые друзья и пользователи сайта ART-UCOZ!

    Уведомляем вас о том, что мы приняли трудное, но обдуманное решение о закрытии проекта в качестве Интернет-магазина ART-UCOZ. С 05.11.2022 года сайт ART-UCOZ.RU продолжит работать в качестве каталога файлов, статей и информации. Будет закрыт только раздел интернет-магазина!

    Все товары были перенесены в наш новый проект SHOPTHEMES - Vendor Marketplace (https://shopthemes.ru), над которым мы долго работали и продолжаем улучшать его в настоящее время.
    Вас ждут: личный кабинет, возможность пополнения баланса на любую сумму, зачисление бонусов за посещение, перевод средств между пользователями, вывод средств (для продавцов), личный чат, больше новых цифровых товаров и многое другое.

    Уважаемые пользователи!
    Доводим до вашего сведения, что мы не занимаемся обучениями по системе uCoz и настройками Ваших сайтов.
    Подобные просьбы и вопросы - будут игнорироваться!

    Анимированные кнопки для скачивания/закгрузок на вашем сайте.

    Дата добавления: 03.10.2019 - 20:12
    Добавил: Buger
    Количество просмотров: 1.6k
    Количество комментариев: 0
    Размер файла: 15.5 Kb
    Рейтинг материала: 5.0 / 1
    Анимированные кнопки для скачивания/закгрузок на вашем сайте.
    БЕСПЛАТНО
    рейтинг 5.0
    /
    голосов 1
    Хотелось бы поделиться с вами несколькими удивительными анимациями для кнопок загрузки (скачивания). Данные кнопки имеют современный стиль и кроссбраузерную анимацию при клике. Настроить их цветовую гамму вы сможете в стилях.

    Смотрите демонстрацию!

    Давайте приступим к установке этих красивых кнопок.

    Для начала нам нужно прописать HTML-код для кнопок:
    Код
    <a href="" class="button">
      <ul>
      <li>Download</li>
      <li>Downloading</li>
      <li>Open File</li>
      </ul>
      <div>
      <svg viewBox="0 0 24 24"></svg>
      </div>
    </a>

    <a href="" class="button dark-single">
      <div>
      <svg viewBox="0 0 24 24"></svg>
      </div>
    </a>

    <div></div>

    <a href="" class="button white-single">
      <div>
      <svg viewBox="0 0 24 24"></svg>
      </div>
    </a>

    <a href="" class="button dark">
      <ul>
      <li>Download</li>
      <li>Downloading</li>
      <li>Open File</li>
      </ul>
      <div>
      <svg viewBox="0 0 24 24"></svg>
      </div>
    </a>

    Затем добавьте в файл стилей (.css) в самый низ, следующий код:
    Код
    .button.dark-single {
      --background: none;
      --rectangle: #242836;
      --success: #4bc793;
    }
    .button.white-single {
      --background: none;
      --rectangle: #f5f9ff;
      --arrow: #275efe;
      --success: #275efe;
      --shadow: rgba(10, 22, 50, 0.1);
    }
    .button.dark {
      --background: #242836;
      --rectangle: #1c212e;
      --arrow: #f5f9ff;
      --text: #f5f9ff;
      --success: #2f3545;
    }

    .button {
      --background: #275efe;
      --rectangle: #184fee;
      --success: #4672f1;
      --text: #fff;
      --arrow: #fff;
      --checkmark: #fff;
      --shadow: rgba(10, 22, 50, 0.24);
      display: flex;
      overflow: hidden;
      text-decoration: none;
      -webkit-mask-image: -webkit-radial-gradient(white, black);
      background: var(--background);
      border-radius: 8px;
      box-shadow: 0 2px 8px -1px var(--shadow);
      transition: box-shadow 0.2s ease, -webkit-transform 0.2s ease;
      transition: transform 0.2s ease, box-shadow 0.2s ease;
      transition: transform 0.2s ease, box-shadow 0.2s ease, -webkit-transform 0.2s ease;
    }
    .button:active {
      -webkit-transform: scale(0.95);
      transform: scale(0.95);
      box-shadow: 0 1px 4px -1px var(--shadow);
    }
    .button ul {
      margin: 0;
      padding: 16px 40px;
      list-style: none;
      text-align: center;
      position: relative;
      -webkit-backface-visibility: hidden;
      backface-visibility: hidden;
      font-size: 16px;
      font-weight: 500;
      line-height: 28px;
      color: var(--text);
    }
    .button ul li:not(:first-child) {
      top: 16px;
      left: 0;
      right: 0;
      position: absolute;
    }
    .button ul li:nth-child(2) {
      top: 76px;
    }
    .button ul li:nth-child(3) {
      top: 136px;
    }
    .button > div {
      position: relative;
      width: 60px;
      height: 60px;
      background: var(--rectangle);
    }
    .button > div:before, .button > div:after {
      content: "";
      display: block;
      position: absolute;
    }
    .button > div:before {
      border-radius: 1px;
      width: 2px;
      top: 50%;
      left: 50%;
      height: 17px;
      margin: -9px 0 0 -1px;
      background: var(--arrow);
    }
    .button > div:after {
      width: 60px;
      height: 60px;
      -webkit-transform-origin: 50% 0;
      transform-origin: 50% 0;
      border-radius: 0 0 80% 80%;
      background: var(--success);
      top: 0;
      left: 0;
      -webkit-transform: scaleY(0);
      transform: scaleY(0);
    }
    .button > div svg {
      display: block;
      position: absolute;
      width: 20px;
      height: 20px;
      left: 50%;
      top: 50%;
      margin: -9px 0 0 -10px;
      fill: none;
      z-index: 1;
      stroke-width: 2px;
      stroke: var(--arrow);
      stroke-linecap: round;
      stroke-linejoin: round;
    }
    .button.loading ul {
      -webkit-animation: text calc(var(--duration) * 1ms) linear forwards calc(var(--duration) * 0.065ms);
      animation: text calc(var(--duration) * 1ms) linear forwards calc(var(--duration) * 0.065ms);
    }
    .button.loading > div:before {
      -webkit-animation: line calc(var(--duration) * 1ms) linear forwards calc(var(--duration) * 0.065ms);
      animation: line calc(var(--duration) * 1ms) linear forwards calc(var(--duration) * 0.065ms);
    }
    .button.loading > div:after {
      -webkit-animation: background calc(var(--duration) * 1ms) linear forwards calc(var(--duration) * 0.065ms);
      animation: background calc(var(--duration) * 1ms) linear forwards calc(var(--duration) * 0.065ms);
    }
    .button.loading > div svg {
      -webkit-animation: svg calc(var(--duration) * 1ms) linear forwards calc(var(--duration) * 0.065ms);
      animation: svg calc(var(--duration) * 1ms) linear forwards calc(var(--duration) * 0.065ms);
    }

    @-webkit-keyframes text {
      10%,
      85% {
      -webkit-transform: translateY(-100%);
      transform: translateY(-100%);
      }
      95%,
      100% {
      -webkit-transform: translateY(-200%);
      transform: translateY(-200%);
      }
    }

    @keyframes text {
      10%,
      85% {
      -webkit-transform: translateY(-100%);
      transform: translateY(-100%);
      }
      95%,
      100% {
      -webkit-transform: translateY(-200%);
      transform: translateY(-200%);
      }
    }
    @-webkit-keyframes line {
      5%,
      10% {
      -webkit-transform: translateY(-30px);
      transform: translateY(-30px);
      }
      40% {
      -webkit-transform: translateY(-20px);
      transform: translateY(-20px);
      }
      65% {
      -webkit-transform: translateY(0);
      transform: translateY(0);
      }
      75%,
      100% {
      -webkit-transform: translateY(30px);
      transform: translateY(30px);
      }
    }
    @keyframes line {
      5%,
      10% {
      -webkit-transform: translateY(-30px);
      transform: translateY(-30px);
      }
      40% {
      -webkit-transform: translateY(-20px);
      transform: translateY(-20px);
      }
      65% {
      -webkit-transform: translateY(0);
      transform: translateY(0);
      }
      75%,
      100% {
      -webkit-transform: translateY(30px);
      transform: translateY(30px);
      }
    }
    @-webkit-keyframes svg {
      0%,
      20% {
      stroke-dasharray: 0;
      stroke-dashoffset: 0;
      }
      21%,
      89% {
      stroke-dasharray: 26px;
      stroke-dashoffset: 26px;
      stroke-width: 3px;
      margin: -10px 0 0 -10px;
      stroke: var(--checkmark);
      }
      100% {
      stroke-dasharray: 26px;
      stroke-dashoffset: 0;
      margin: -10px 0 0 -10px;
      stroke: var(--checkmark);
      }
      12% {
      opacity: 1;
      }
      20%,
      89% {
      opacity: 0;
      }
      90%,
      100% {
      opacity: 1;
      }
    }
    @keyframes svg {
      0%,
      20% {
      stroke-dasharray: 0;
      stroke-dashoffset: 0;
      }
      21%,
      89% {
      stroke-dasharray: 26px;
      stroke-dashoffset: 26px;
      stroke-width: 3px;
      margin: -10px 0 0 -10px;
      stroke: var(--checkmark);
      }
      100% {
      stroke-dasharray: 26px;
      stroke-dashoffset: 0;
      margin: -10px 0 0 -10px;
      stroke: var(--checkmark);
      }
      12% {
      opacity: 1;
      }
      20%,
      89% {
      opacity: 0;
      }
      90%,
      100% {
      opacity: 1;
      }
    }
    @-webkit-keyframes background {
      10% {
      -webkit-transform: scaleY(0);
      transform: scaleY(0);
      }
      40% {
      -webkit-transform: scaleY(0.15);
      transform: scaleY(0.15);
      }
      65% {
      -webkit-transform: scaleY(0.5);
      transform: scaleY(0.5);
      border-radius: 0 0 50% 50%;
      }
      75% {
      border-radius: 0 0 50% 50%;
      }
      90%,
      100% {
      border-radius: 0;
      }
      75%,
      100% {
      -webkit-transform: scaleY(1);
      transform: scaleY(1);
      }
    }
    @keyframes background {
      10% {
      -webkit-transform: scaleY(0);
      transform: scaleY(0);
      }
      40% {
      -webkit-transform: scaleY(0.15);
      transform: scaleY(0.15);
      }
      65% {
      -webkit-transform: scaleY(0.5);
      transform: scaleY(0.5);
      border-radius: 0 0 50% 50%;
      }
      75% {
      border-radius: 0 0 50% 50%;
      }
      90%,
      100% {
      border-radius: 0;
      }
      75%,
      100% {
      -webkit-transform: scaleY(1);
      transform: scaleY(1);
      }
    }

    И теперь нам остается вставить js-код перед закрывающим тегом </body> (внизу страницы).
    Обратите внимание, что код написан для вставки в HTML документ, и имеет подключеную библиотеку TweenMax из репозитория CDNJS.
    Код
    <script src='https://cdnjs.cloudflare.com/ajax/libs/gsap/2.1.3/TweenMax.min.js'></script>
    <script>$('.button').each(function(e) {

      let duration = 3000,
      btn = $(this),
      svg = btn.find('svg'),
      svgPath = new Proxy({
      y: null,
      smoothing: null
      }, {
      set(target, key, value) {
      target[key] = value;
      if(target.y !== null && target.smoothing !== null) {
      svg.html(getPath(target.y, target.smoothing, null))
      }
      return true;
      },
      get(target, key) {
      return target[key];
      }
      });

      btn.css('--duration', duration);

      svgPath.y = 20;
      svgPath.smoothing = 0;

      btn.on('click', e => {

      if(!btn.hasClass('loading')) {

      btn.addClass('loading');

      TweenMax.to(svgPath, duration * .065 / 1000, {
      smoothing: .3
      });

      TweenMax.to(svgPath, duration * .265 / 1000, {
      y: 12,
      ease: Elastic.easeOut.config(1.12, .4)
      }).delay(duration * .065 / 1000);

      setTimeout(() => {
      svg.html(getPath(0, 0, [
      [3, 14],
      [8, 19],
      [21, 6]
      ]));
      }, (duration / 2));

      }

      return false;

      });

    });

    function getPoint(point, i, a, smoothing) {
      let cp = (current, previous, next, reverse) => {
      let p = previous || current,
      n = next || current,
      o = {
      length: Math.sqrt(Math.pow(n[0] - p[0], 2) + Math.pow(n[1] - p[1], 2)),
      angle: Math.atan2(n[1] - p[1], n[0] - p[0])
      },
      angle = o.angle + (reverse ? Math.PI : 0),
      length = o.length * smoothing;
      return [current[0] + Math.cos(angle) * length, current[1] + Math.sin(angle) * length];
      },
      cps = cp(a[i - 1], a[i - 2], point, false),
      cpe = cp(point, a[i - 1], a[i + 1], true);
      return `C ${cps[0]},${cps[1]} ${cpe[0]},${cpe[1]} ${point[0]},${point[1]}`;
    }

    function getPath(update, smoothing, pointsNew) {
      let points = pointsNew ? pointsNew : [
      [4, 12],
      [12, update],
      [20, 12]
      ],
      d = points.reduce((acc, point, i, a) => i === 0 ? `M ${point[0]},${point[1]}` : `${acc} ${getPoint(point, i, a, smoothing)}`, '');
      return `<path d="${d}" />`;
    }</script>

    Не забывайте, что у вас должен быть подключен файл библиотеки jQuery
    Вот и всё, вам остается только настроить всё под свои нужды.
    Всем Успехов!!!
    Добавлять комментарии могут только зарегистрированные пользователи.


    Поделись с друзьями: