2013-10-03

javascript:パノラマ写真をドラッグでスクロール

サンプル

◆html

16行目:width, height で画像を表示するサイズを定義する。
17行目:width, height で画像のサイズを定義する。urlで画像ファイルを定義する。
<!DOCTYPE html>
<html lang="ja">
<head>
<title>Panorama</title>
<meta http-equiv="imagetoolbar" content="no" />
<link rel="stylesheet" href="panorama.css">
<script src="panorama.js"></script>
</head>

<body>

<div align="center">

<h1>九十九谷</h1>

<div id="panorama_wrapper" style="width:1000px; height:400px;">
 <div id="panorama_image" style="width:2261px; height:400px; background-image: url('001.jpg')"></div>
</div>

</div>

</body>
</html>

◆javascript(panorama.js)

尚、360°パノラマ写真を連続してドラッグできるようにするには、20行目の代わりに21行目を使用し、46,47行目を使用する。

var dx = 0; // マウスダウンした場所の画像の座標
var xcache = 0; // 画像の左端のスクリーンの左端に対する座標
var dragObj; // ドラッグの状態を表す。 null→ドラッグしていない状況
var maxLeft; // もっとも左に移動したときの画像の左端のスクリーンの左端に対する座標<0
var panorama_width; //画像の幅

window.onload = function () {
 setPicture();
}

function setPicture(){

 dragObj = null;

 document.getElementById('panorama_wrapper').onmousemove = mouseMove;
 document.onmouseup = mouseUp;
 document.getElementById('panorama_wrapper').onmousedown = mouseDown;

 panorama_width = document.getElementById('panorama_image').clientWidth;
 maxLeft = document.getElementById('panorama_wrapper').clientWidth - panorama_width;
// maxLeft = document.getElementById('panorama_wrapper').clientWidth - panorama_width*2; // 360°パノラマの場合、この行を使用する。
   // もっとも左に移動したときの画像の左端のスクリーンの左端に対する座標<0

 var img = document.getElementById('panorama_image');
 img.style.width = panorama_width*2+"px";

 xcache = 0;

}

function mouseDown(e) {

 if(window.event) e = window.event;
 dragObj = this;
 var x = e.clientX ;  // マウスダウンした場所のスクリーンの座標
 dx = x - xcache;  // マウスダウンした場所の画像の座標
}

function mouseMove(e) {

 if(!dragObj)return;
 if(window.event) e = window.event;
 var x = e.clientX ;
 var xcache_tmp = x - dx; // ドラッグによる移動量

// if ( xcache_tmp >0 ) {xcache_tmp -= panorama_width;}  // 360°パノラマの場合、この行を使用する。
// if ( xcache_tmp <maxLeft ) {xcache_tmp += panorama_width;} // 360°パノラマの場合、この行を使用する。

 if(maxLeft < xcache_tmp && 0 >= xcache_tmp){ // 画像が可動の範囲であれば実行
  document.getElementById('panorama_image').style.left = xcache_tmp + "px";
  xcache = xcache_tmp; // 画像の左端のスクリーンの左端に対する座標
 }

 if(window.event) window.event.returnValue = false;
 else return false;

}

function mouseUp (e) {
 dragObj = null;
}


◆css(panorama.css)

div#panorama_wrapper {
 overflow: hidden;
 position: relative;
}

div#panorama_image {
 position: absolute;
 cursor : pointer;
}

◆その他

パノラマ写真を作るにはImage Composite Editorが便利です。

参考にしたページ

Javascriptでパノラマ写真をドラッグ