我正在创建一张650 X 610 px的历史铁路地图,并希望以空白地图开始,然后淡入透明的.png层,其中只包含铁路的一个片段,一个在另一个的顶部,建立到整个网络的形象。
会有一个网络扩展到点击的日期列表,并显示该位线。使用实体图像轻松完成,但非常慢,有31张图像。
我无法在任何地方找到任何论坛查询。请有人帮忙吗?
答案 0 :(得分:0)
试试这个简单的例子(在Opera 10和Firefox 2中测试过)。每个图像必须具有相同的尺寸。这意味着每个图层都放在同一个位置。
你应该改变的是:
width
块内的所有height
和<style>
值(以像素为单位)以匹配您的完整地图。
layerdata
数组,其中包含每个图层的日期选择文本(date
)的对象和图像的网址(url
)。
animdelay
。淡入/淡出每个不透明度级别的毫秒( 1 / 1000 秒)单位延迟。默认值为100毫秒。共有10个不透明度级别。减少延迟以加速动画。
sample.html
:
<html> <head> <style> #dates label { display:block; } #frame { border:1px solid black; width:500px; height:500px; } .layer { "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0; position:absolute; width:500px; height:500px; } </style> </head> <body> Date: <div id="dates"> </div> <div id="frame"> </div> <script> //get element opacity for Internet Explorer function getOpacityIE(ele) { //returns level: 0-100 return ele.filters[0].opacity; } //set element opacity for Internet Explorer function setOpacityIE(ele,level) { //level: 0-100 ele.filters[0].opacity=level; } //get element opacity for web-standard browsers function getOpacityStd(ele) { //returns level: 0-100 return (ele.style.opacity!=''?ele.style.opacity*100:0); } //set element opacity for web-standard browsers function setOpacityStd(ele,level) { //level: 0-100 ele.style.opacity=(level/100).toFixed(1); } //fade in/out each layers based on target date index function 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); } //set/update layer index to show/hide and animate it function setdate(ele) { window.clearTimeout(animtimer); dateidx=ele.attributes['index'].value*1; animate(); } //add date selection, below any existing one function 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); } //add layer (image) into frame, on top of any existing one function addlayer(idx,url) { var a=document.createElement('IMG'); a.className='layer'; a.src=url; layers.push(a); frame.appendChild(a); } //layerdata: from bottom to top var layerdata=[ {date:'2000-01-01', url:'image1.png'}, {date:'2000-01-08', url:'image2.png'}, {date:'2000-01-15', url:'image3.png'}, {date:'2000-01-22', url:'image4.png'} ]; //animation delay in 1/1000 second unit per opacity level var animdelay=100; //runtime variables var dateidx=-1; var layers=[]; var animtimer=0; if (typeof(frame.style.opacity)!='undefined') { var getOpacity=getOpacityStd; var setOpacity=setOpacityStd; } else { var getOpacity=getOpacityIE; var setOpacity=setOpacityIE; } //generate date selections and layers for (var i=0; i<layerdata.length; i++) { addselection(i,layerdata[i].date); addlayer(i,layerdata[i].url); } </script> </body> </html>