← 動的パーツギャラリーへ戻る

パーツ番号 08-11-07 ・ JavaScript使用

カチッと鳴るロック解除

タップすると錠前アイコンがカチッと弾んでシャックルが開き、緑色に切り替わります。WordPressの会員限定コンテンツの解錠・認証成功演出に使えます。

mobileclickjs

プレビュー

ソースコード

HTML

<div class="d08-11-07-stage">
          <button class="d08-11-07-lock" type="button" aria-label="ロック解除">
            <svg class="d08-11-07-icon" viewBox="0 0 24 24" width="34" height="34" aria-hidden="true">
              <rect x="5" y="11" width="14" height="10" rx="2" fill="currentColor"/>
              <path class="d08-11-07-shackle" d="M8 11V8a4 4 0 0 1 8 0v3" stroke="currentColor" stroke-width="2.4" fill="none" stroke-linecap="round"/>
            </svg>
          </button>
          <span class="d08-11-07-status">タップしてロック解除</span>
        </div>

CSS

.d08-11-07-stage{display:flex;flex-direction:column;align-items:center;gap:10px}
        .d08-11-07-lock{background:none;border:none;cursor:pointer;padding:8px;color:#6b7280;transition:color .25s}
        .d08-11-07-lock.is-unlocked{color:#22c55e}
        .d08-11-07-icon{display:block}
        .d08-11-07-shackle{transition:transform .3s cubic-bezier(.4,0,.2,1);transform-origin:80% 100%}
        .d08-11-07-lock.is-unlocked .d08-11-07-shackle{transform:translateX(4px) rotate(-18deg)}
        .d08-11-07-lock.is-snap .d08-11-07-icon{animation:d08-11-07-snap .28s cubic-bezier(.3,1.8,.4,1)}
        @keyframes d08-11-07-snap{0%{transform:scale(1)}40%{transform:scale(.86)}70%{transform:scale(1.08)}100%{transform:scale(1)}}
        .d08-11-07-status{font-size:11px;font-weight:700;color:#9aa0ad}

JavaScript

(function(){
        var lock=document.querySelector('#item-08-11-07 .d08-11-07-lock');
        var status=document.querySelector('#item-08-11-07 .d08-11-07-status');
        if(!lock||!status)return;
        var timer=null;
        lock.addEventListener('click',function(){
          if(timer)clearTimeout(timer);
          lock.classList.add('is-unlocked');
          status.textContent='カチッ、解除されました';
          lock.classList.remove('is-snap');void lock.offsetWidth;lock.classList.add('is-snap');
          timer=setTimeout(function(){
            lock.classList.remove('is-unlocked');
            status.textContent='タップしてロック解除';
          },1800);
        });
      })();

クラス名 .d08-11-07 は本ライブラリ内での識別用です。複数のパーツを同じページで使う場合は、重複しないよう名前を変更してください。