<img src="Water lilies.jpg" usemap="#map_sample" border="0" alt="sample">
<map name="map_sample">
<area shape="circle" coords="156,164,5" href="#" alt="円">
<area shape="circle" coords="200,85,5" href="#" alt="円">
<area shape="poly" coords="156,109 173,154 211,146 217,120 181,99"   href="#" alt="多角形">
</map>
<textarea rows=5 cols=10 id=tt1></textarea>
<script>
var x1=156,y1=164;//A
var x2=200,y2=85;//B
var b=[[156,109],[173,154],[211,146],[217,120],[181,99]];
var mx=0,my=0;//move point step
function move(){
    if(x1+mx>x2)clearInterval(timer);
    mx++;//偏移量x
    my=(y2-y1)*mx/(x2-x1);//偏移量y
    document.getElementById("tt1").value=my
    // 起点y   +  相対偏移量x   * 斜率                              <=移動点y 
    if(Math.abs(b[0][1] + (x1+mx-b[0][0])*(b[0][1]-b[1][1])/(b[0][0]-b[1][0]))>=y1+my){ 
        alert((mx+x1)+":"+(my+y1));
        clearInterval(timer);
    }
    
}
var timer=setInterval(move,10);
</script>请您帮个忙。
帮人帮到底。送佛送到西。
以后我会记得你的大恩大德的。把它改变成一个函数。传三个值进去。(一个是MAP的ID(用JS直接得到该ID的area坐标)。别外两个是AB点坐标。)
就可以返回点碰到这个图的坐标。没有碰到。者返回FALSH。
并且里面把点的反方向也考虑进去。也就是AB的位置考虑进去。以我的JS水平。无法写出来啊。
跪求帮忙。以后忘不了你。

解决方案 »

  1.   

    <img src="Water lilies.jpg" usemap="#map_sample" border="0" alt="sample">
    <map name="map_sample">
    <area shape="circle" coords="156,164,5" href="#" alt="円">
    <area shape="circle" coords="200,85,5" href="#" alt="円">
    <area shape="poly" coords="156,109 173,154 211,146 217,120 181,99" href="#" alt="多角形">
    </map>
    <textarea rows=5 cols=10 id=tt1></textarea>
    <script>
    var x1=156,y1=164;//A
    var x2=200,y2=85;//B
    var b=[[156,109],[173,154],[211,146],[217,120],[181,99]];
    var mx=0,my=0;//move point step
    var timer;
    var f=1;
    function move(){
      if(x1+mx>f*x2){
        clearInterval(timer);
        return false;
      }
      mx++;//偏移量x
      my=f*(y2-y1)*mx/(x2-x1);//偏移量y
      document.getElementById("tt1").value=my
      // 起点y + 相対偏移量x * 斜率 <=移動点y  
      if(f*Math.abs(b[0][1] + (x1+mx-b[0][0])*(b[0][1]-b[1][1])/(b[0][0]-b[1][0]))>=f*(y1+my)){  
      return((mx+x1)+":"+(my+y1));
      clearInterval(timer);
      }
        
    }
    function yourFunctionName(mapId,pointA,pointB){
    x1=pointA[0],y1=pointA[1];
    x2=pointB[0],y2=pointB[1];
    f=y1>=y2?1:-1;
    var mapP=document.getElementsByName(mapId)[0].childNodes[2].getAttribute("coords").split(",");
        b=[];
    for(var i=0;i<mapP.length/2;i++)b[b.length]=new Array(parseInt(mapP[i*2]),parseInt(mapP[i*2+1]));
    timer=setInterval(move,10);
    }
    yourFunctionName("map_sample",[156,164],[200,85]);
    </script>
    AB点反方向的情况没测,我给你的例子,只考虑了AB线是先跟你的前两个点的连线交点的情况,而实际上的情况是有几条边就有几种情况,思路是这样:
    1 判断a,b哪个在上
    2 判断ab线是跟那两个点的先连线相交(设为L)
    3 把a,b的一个点设成起动点(x1,y1),另一个设成终点(x2,y2)
    4 判断起点在L的上还是下,在L下边,f为正,在L下边f为负。
    5 然后动点慢慢加,应该可以得到结果好好考虑下,没有那个地方是难的,求两直线的交点初中大家都学过,这里拿到程序里来实现对你来说也不难
    动动手,动动脑,祝你成功。
      

  2.   

    CSDN的人真是好.
    我是才来CSDN的BBS.
    以前经常在CSDN下源码.
    CSDN为国内程序做出了不少的贡献啊。