構造化する方法はたくさんありますが、それは絶対に可能です。これは、考えられる多くの解決策の 1 つです。随所にラファエルの紙のオブジェが存在することを想定してpaper
います。
場所と寸法
var cx = 180, cy = 125; /* These are the coordinates of the center point of your image(s) inside the paper */
var dx = 320, dy = 240; /* dx and dy describe the dimensions of the desired image interface. */
画像情報
この情報を ajax (ギャラリーの構造に応じて) を介して動的にロードするか、再利用できるようにする必要があると思います。この例では、リスト内の各項目のurl
、width
、およびを記述するオブジェクトの配列を使用しています。height
例えば...
var imageList =
[
{
url: '/tests/images/sunset1.jpg',
width: 1600,
height: 900,
},
{
url: '/tests/images/moonrise1.jpg',
width: 1024,
height: 768,
},
{
url: '/tests/images/cityscape.jpg',
width: 1920,
height: 1080,
},
{
url: '/tests/images/forest03.jpg',
width: 500,
height: 325,
},
];
コード
最後に、DOM の準備ができたら (または画像が読み込まれた後、またはその他のイベントがそれをトリガーする必要がある場合)、このコードを実行します。これは、トランジションを行う関数を作成し、それを呼び出して最初の画像を配置するだけです。
var imageIndex = 0;
var rotationMultiplier = 1;
var currentImage = null;
function rotateTransitionNext()
{
rotationMultiplier *= -1;
imageIndex++;
if ( imageIndex >= imageList.length )
imageIndex = 0;
if ( currentImage )
{
currentImage.animate( { transform: ["...r", 180 * rotationMultiplier, cx, cy], opacity: 0.0 }, 1000, '<>', function()
{
this.remove();
} );
}
var newImage = paper.image( imageList[imageIndex].url, cx - dx / 2, cy - dy / 2, dx, dy )
.attr( { transform: [ "r", -180 * rotationMultiplier, cx, cy], opacity: 0.0 } )
.animate( { transform: [ "...r", 180 * rotationMultiplier, cx, cy ], opacity: 1.0 }, 1000, '<>', function()
{
currentImage = this;
this.click( rotateTransitionNext );
} );
}
rotateTransitionNext();
ルーズエンド
大まかな出発点として、これをまとめるために行うべきことがいくつかあります。
善のために、これを独自の名前空間にラップして、グローバルスコープが残骸で乱雑にならないようにします(私の悪いことです)
異なる画像の縦横比を維持します。現在、すべての画像は、グローバルに定義された寸法 (dx および dy) に準拠するよう強制されています。
ハッピーコーディング。
更新:これは、作業中のこのコードの段階的な例です。画像をクリックするだけで、次の画像に回転します。