私は 650 X 610 px の歴史的な鉄道地図を作成しています。空白の地図から始めて、鉄道の断片だけを含む透明な .png レイヤーをフェード インし、1 つずつ重ねて、鉄道の画像を作成したいと考えています。ネットワーク全体。
ネットワークが拡張された日付のリストがあり、クリックするとその行が表示されます。ソリッド イメージを使用して簡単に実行できますが、非常に遅く、31 個のイメージがあります。
これに関するフォーラムのクエリはどこにも見つかりませんでした。誰か助けてください。
私は 650 X 610 px の歴史的な鉄道地図を作成しています。空白の地図から始めて、鉄道の断片だけを含む透明な .png レイヤーをフェード インし、1 つずつ重ねて、鉄道の画像を作成したいと考えています。ネットワーク全体。
ネットワークが拡張された日付のリストがあり、クリックするとその行が表示されます。ソリッド イメージを使用して簡単に実行できますが、非常に遅く、31 個のイメージがあります。
これに関するフォーラムのクエリはどこにも見つかりませんでした。誰か助けてください。
この簡単な例を試してください(Opera10およびFirefox2でテスト済み)。各画像は同じサイズである必要があります。各レイヤーが同じ場所に配置されることを意味します。
変更する必要があるのは次のとおりです。
完全なマップに一致するブロック内のすべてwidth
とheight
値(ピクセル単位) 。<style>
各layerdata
レイヤーの日付選択テキストのオブジェクト(date
)と画像のURL ()を含む配列url
。
animdelay
。フェードイン/フェードアウトの不透明度レベルごとのミリ秒(1/1000秒)単位の遅延。デフォルトは100msです。合計10の不透明度レベルがあります。アニメーションを高速化するには、遅延を減らします。
sample.html
:
<html> <頭> <スタイル> #dates label {display:block; } #frame {border:1px solid black; 幅:500px; 高さ:500px; } .layer { "progid:DXImageTransform.Microsoft.Alpha(Opacity = 0)"; filter:alpha(opacity = 0); 不透明度:0; 位置:絶対; 幅:500px; 高さ:500px; } </ style> </ head> <本体> 日にち: <div id = "dates"> </ div> <div id = "frame"> </ div> <スクリプト> //InternetExplorerの要素の不透明度を取得します function getOpacityIE(ele){//レベルを返します:0-100 ele.filters[0].opacityを返します。 } //InternetExplorerの要素の不透明度を設定します function setOpacityIE(ele、level){//レベル:0-100 ele.filters [0] .opacity = level; } //Web標準ブラウザの要素の不透明度を取得します function getOpacityStd(ele){//レベルを返します:0-100 return(ele.style.opacity!=''?ele.style.opacity * 100:0); } //Web標準ブラウザの要素の不透明度を設定します function setOpacityStd(ele、level){//レベル:0-100 ele.style.opacity =(level / 100).toFixed(1); } //ターゲットの日付インデックスに基づいて各レイヤーをフェードイン/フェードアウトします 関数animate(){ var done = true; for(var i = 0; i <layers.length; i ++){ var Adjust = i <= dateidx?10:-10; var level = getOpacity(layers [i]); if(((adjust> 0)&&(level <100))||((adjust <0)&&(level> 0))){ setOpacity(layers [i]、level + Adjust); done = false; } } if(!done)animtimer = window.setTimeout(animate、animdelay); } //レイヤーインデックスを設定/更新して、表示/非表示およびアニメーション化します function setdate(ele){ window.clearTimeout(animtimer); dateidx =ele.attributes['index']。value*1; animate(); } //既存の日付の下に日付選択を追加します 関数addselection(idx、date){ var a = document.createElement('LABEL'); a.htmlFor ='date' + idx; a.innerHTML ='<input id = "date' + idx +'" index = "'+ idx +'" name = "date" type = "radio" onclick = "setdate(this)" />' + date; dates.appendChild(a); } //既存のレイヤーの上にレイヤー(画像)をフレームに追加します 関数addlayer(idx、url){ var a = document.createElement('IMG'); a.className='レイヤー'; a.src = url; layers.push(a); frame.appendChild(a); } // layerdata:下から上へ var layerdata = [ {日付: '2000-01-01'、URL:'image1.png'}、 {日付: '2000-01-08'、URL:'image2.png'}、 {日付: '2000-01-15'、URL:'image3.png'}、 {日付: '2000-01-22'、URL:'image4.png'} ]; //不透明度レベルあたり1/1000秒単位のアニメーション遅延 var animdelay = 100; //ランタイム変数 var dateidx = -1; varlayers = []; var animtimer = 0; if(typeof(frame.style.opacity)!='undefined'){ var getOpacity = getOpacityStd; var setOpacity = setOpacityStd; } そうしないと { var getOpacity = getOpacityIE; var setOpacity = setOpacityIE; } //日付の選択とレイヤーを生成します for(var i = 0; i <layerdata.length; i ++){ addselection(i、layerdata [i] .date); addlayer(i、layerdata [i] .url); } </ script> </ body> </ html>