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

パーツ番号 10-13-11 ・ JavaScript使用

物件写真360度ビュー風ドラッグプレビュー

写真エリアを左右にドラッグすると背景の色合いと角度表示が変化し、外観を一周見渡しているような演出になります。物件詳細ページの外観確認コンテンツに使えます。

dragjs

プレビュー

ソースコード

HTML

<div class="d10-13-11-panel">
          <div class="d10-13-11-view" id="d1787View"></div>
          <p class="d10-13-11-angle" id="d1787Angle">0°</p>
          <div class="d10-13-11-ring">
            <span class="d10-13-11-dot" id="d1787Dot"></span>
          </div>
          <p class="d10-13-11-hint">左右にドラッグして360°プレビュー</p>
        </div>

CSS

.d10-13-11{padding:16px}
        .d10-13-11-panel{width:100%;max-width:260px;text-align:center}
        .d10-13-11-view{width:100%;height:110px;border-radius:12px;background:linear-gradient(100deg,#c9d6e3,#8fa6bd);cursor:ew-resize;touch-action:pan-y}
        .d10-13-11-angle{margin:8px 0 4px;font-size:13px;font-weight:800;color:#1f2a37}
        .d10-13-11-ring{position:relative;width:52px;height:52px;margin:0 auto 6px;border-radius:50%;border:2px solid #e3e8ec}
        .d10-13-11-dot{position:absolute;top:-4px;left:50%;width:8px;height:8px;margin-left:-4px;border-radius:50%;background:#2f7fef;transform-origin:4px 30px}
        .d10-13-11-hint{margin:0;font-size:10.5px;color:#8a94a3}

JavaScript

(function(){
        var root=document.currentScript.closest('.item').querySelector('.d10-13-11');
        var view=root.querySelector('#d1787View');
        var angleTxt=root.querySelector('#d1787Angle');
        var dot=root.querySelector('#d1787Dot');
        var stops=[
          'linear-gradient(100deg,#c9d6e3,#8fa6bd)',
          'linear-gradient(100deg,#b7c6d9,#6f89a8)',
          'linear-gradient(100deg,#a9c9ff,#5a6b7a)',
          'linear-gradient(100deg,#8fa6bd,#c9d6e3)',
          'linear-gradient(100deg,#6f89a8,#b7c6d9)'
        ];
        var angle=0,startX=0,dragging=false;
        function render(){
          angleTxt.textContent=Math.round(angle)+'°';
          dot.style.transform='rotate('+angle+'deg)';
          var idx=Math.floor(((angle%360)+360)%360/72);
          view.style.background=stops[idx];
        }
        view.addEventListener('pointerdown',function(e){
          dragging=true;startX=e.clientX;
          try{view.setPointerCapture(e.pointerId);}catch(err){}
        });
        view.addEventListener('pointermove',function(e){
          if(!dragging)return;
          var dx=e.clientX-startX;
          startX=e.clientX;
          angle=(angle+dx*1.4+360)%360;
          render();
        });
        function stop(){dragging=false;}
        view.addEventListener('pointerup',stop);
        view.addEventListener('pointercancel',stop);
        render();
      })();

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