scootergrisen wrote:
> Takker jeg har gemt det og kan ikke bruge det senere.
Tak ;-) - hvorfor kan du ikke bruge det?
> På et tidspunkt havde jeg store problemer med mousens x og y når man
> klikkede så der skulle jeg nok havde haft din kode.
Præcis, for netop muse koordinater er et problem, ikke mindst når der er
tale om scrool på en side.
Problemet er (nogle gange) at koordinater er relativt til skærmen, og ikke
dokumentet, derfor skal man have scroll med i billedet, da man ellers
'rammer forkert'.
> Hvis jeg senere for problemer så kigger jeg på din kode og ser om
> løsningen ikke er der.
FYI:
Det er et uddrag af *fungerende* løsninger fra IE6 og op + 'de andre' :-)
Hvis du (eller i) vil have lidt sjov til julen, så er her lidt fra mit
'stargate' projekt, som egentlig kun var for at afdække nogle
problemstillinger.
* manipulering/placering af billeder.
men vigtigst:
* Har man klikket inden for en arbitrær polygon?
Det sidste er et udtryk for en _beregnet_ polygon og ikke em 'imagemap'.
HTML'et:
------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="
http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>W.O.P.R Stargate</title>
<script type="text/javascript"
src="/javascript/wopr.stargate.js"></script>
</head>
<body onload="initialize_stargate();">
<div>
<img id="sparre_sel" src="images/glyph01.gif" alt="sparre1" style="position:
absolute;"/>
<table>
<tr><td>TESTER</td><td>
<div id="stargate" style="margin:0;padding:0;"><img
style="margin:0;padding:0;border:none;" id="stargate_picture"
alt="Stargate" title="Picture of stargate" src="gate.gif" width="600"
height="600"/></div>
<div id="sparreclick"></div>
</td></tr></table>
</div>
</body>
</html>
---------------------
Og js'et (bemærk redundans i forhold til andet):
---------------------
var stargatebaseX ;
var stargatebaseY ;
var stargate_maxX ;
var stargate_maxY ;
var stargate_arrayX = new Array ;
var stargate_arrayY = new Array ;
var sparre_sel ;
var stargate_sparre_arrayX = new Array ;
var stargate_sparre_arrayY = new Array ;
function stargate_create_sparre_click(sparre_polygon,index) {
var sp_arrayX = new Array ;
var sp_arrayY = new Array ;
for ( var i = 0 ; i <sparre_polygon.length/2 ;i++) {
sp_arrayX[i] = sparre_polygon[i*2] ;
sp_arrayY[i] = sparre_polygon[i*2+1] ;
}
stargate_arrayX[index-1] = sp_arrayX ;
stargate_arrayY[index-1] = sp_arrayY ;
}
function stargate_create_sparre_pos(sparre_XY,index) {
stargate_sparre_arrayX[index-1] = sparre_XY[0] ;
stargate_sparre_arrayY[index-1] = sparre_XY[1] ;
}
stargate_create_sparre_click([280, 90, 274, 22, 319, 22, 315, 90],1) ;
stargate_create_sparre_pos([274,23],1) ;
stargate_create_sparre_click([318, 87, 323, 19, 362, 27, 346, 92],2) ;
stargate_create_sparre_pos([318,25],2) ;
stargate_create_sparre_click([347, 94, 363, 24, 399, 40, 376, 102],3) ;
stargate_create_sparre_pos([349,30],3) ;
stargate_create_sparre_click([374, 102, 402, 43, 437, 56, 402, 114],4) ;
stargate_create_sparre_pos([374,43],4) ;
stargate_create_sparre_click([404, 118, 437, 56, 473, 77, 431, 132],5) ;
stargate_create_sparre_pos([404,56],5) ;
stargate_create_sparre_click([430, 134, 472, 77, 502, 104, 452, 149],6) ;
stargate_create_sparre_pos([430,77],6) ;
stargate_create_sparre_click([452, 153, 503, 103, 529, 141, 472, 179],7) ;
stargate_create_sparre_pos([452,103],7) ;
stargate_create_sparre_click([475, 179, 530, 137, 553, 174, 491, 206],8) ;
stargate_create_sparre_pos([475,137],8) ;
stargate_create_sparre_click([494, 208, 556, 176, 567, 219, 507, 240],9) ;
stargate_create_sparre_pos([494,176],9) ;
stargate_create_sparre_click([503, 245, 569, 218, 577, 260, 510, 268],10) ;
stargate_create_sparre_pos([503,218],10) ;
stargate_create_sparre_click([511, 274, 579, 258, 579, 300, 517, 303],11) ;
stargate_create_sparre_pos([511,258],11) ;
stargate_create_sparre_click([512, 306, 578, 304, 576, 339, 511, 329],12) ;
stargate_create_sparre_pos([511,306],12) ;
stargate_create_sparre_click([512, 333, 580, 339, 570, 382, 504, 362],13) ;
stargate_create_sparre_pos([504,333],13) ;
stargate_create_sparre_click([506, 365, 572, 385, 554, 423, 489, 391],14) ;
stargate_create_sparre_pos([489,365],14) ;
stargate_create_sparre_click([490, 395, 552, 420, 526, 463, 472, 427],15) ;
stargate_create_sparre_pos([472,395],15) ;
stargate_create_sparre_click([471, 427, 529, 463, 498, 502, 449, 454],16) ;
stargate_create_sparre_pos([449,427],16) ;
stargate_create_sparre_click([447, 458, 496, 503, 456, 534, 418, 477],17) ;
stargate_create_sparre_pos([418,458],17) ;
stargate_create_sparre_click([415, 483, 453, 536, 405, 559, 381, 500],18) ;
stargate_create_sparre_pos([381,483],18) ;
stargate_create_sparre_click([379, 497, 402, 560, 354, 574, 343, 510],19) ;
stargate_create_sparre_pos([343,497],19) ;
stargate_create_sparre_click([337, 512, 352, 575, 298, 580, 300, 512],20) ;
stargate_create_sparre_pos([298,512],20) ;
stargate_create_sparre_click([297, 511, 300, 580, 255, 576, 266, 511],21) ;
stargate_create_sparre_pos([255,511],21) ;
stargate_create_sparre_click([262, 510, 254, 575, 209, 564, 230, 502],22) ;
stargate_create_sparre_pos([209,502],22) ;
stargate_create_sparre_click([230, 500, 209, 561, 173, 543, 202, 488],23) ;
stargate_create_sparre_pos([173,488],23) ;
stargate_create_sparre_click([204, 485, 173, 545, 130, 522, 171, 470],24) ;
stargate_create_sparre_pos([134,472],24) ;
stargate_create_sparre_click([172, 466, 132, 521, 101, 494, 147, 448],25) ;
stargate_create_sparre_pos([101,448],25) ;
stargate_create_sparre_click([149, 450, 101, 495, 76, 462, 131, 424],26) ;
stargate_create_sparre_pos([76,424],26) ;
stargate_create_sparre_click([132, 424, 74, 460, 48, 426, 112, 392],27) ;
stargate_create_sparre_pos([48,392],27) ;
stargate_create_sparre_click([114, 392, 49, 422, 35, 383, 98, 363],28) ;
stargate_create_sparre_pos([35,363],28) ;
stargate_create_sparre_click([100, 364, 34, 382, 24, 337, 88, 329],29) ;
stargate_create_sparre_pos([24,329],29) ;
stargate_create_sparre_click([90, 330, 25, 337, 23, 293, 87, 294],30) ;
stargate_create_sparre_pos([23,293],30) ;
stargate_create_sparre_click([88, 292, 24, 291, 27, 251, 89, 262],31) ;
stargate_create_sparre_pos([24,262],31) ;
stargate_create_sparre_click([88, 264, 27, 253, 37, 205, 97, 228],32) ;
stargate_create_sparre_pos([27,205],32) ;
stargate_create_sparre_click([99, 229, 40, 207, 53, 169, 112, 197],33) ;
stargate_create_sparre_pos([40,197],33) ;
stargate_create_sparre_click([114, 201, 57, 167, 75, 133, 131, 175],34) ;
stargate_create_sparre_pos([57,133],34) ;
stargate_create_sparre_click([130, 175, 77, 129, 106, 96, 151, 147],35) ;
stargate_create_sparre_pos([77,106],35) ;
stargate_create_sparre_click([152, 145, 109, 96, 143, 66, 180, 125],36) ;
stargate_create_sparre_pos([96,96],36) ;
stargate_create_sparre_click([182, 126, 143, 67, 185, 46, 212, 108],37) ;
stargate_create_sparre_pos([143,46],37) ;
stargate_create_sparre_click([214, 108, 188, 46, 230, 30, 248, 96],38) ;
stargate_create_sparre_pos([188,30],38) ;
stargate_create_sparre_click([248, 98, 232, 30, 273, 21, 280, 91],39) ;
stargate_create_sparre_pos([232,21],39) ;
function getY(e) {
var top = 0;
while (e.offsetParent){
top += e.offsetTop;
e = e.offsetParent;
}
return top ;
}
function getX(e) {
var left = 0;
while (e.offsetParent){
left += e.offsetLeft;
e = e.offsetParent;
}
return left ;
}
function initialize_stargate() {
var si = document.getElementById('stargate') ;
stargatebaseX = getX(si) ;
stargatebaseY = getY(si) ;
stargate_maxX = si.clientWidth ;
stargate_maxY = si.clientHeight ;
si.onmouseup = function(ev) {
setstargate_click(ev) ;
}
sparre_sel = document.getElementById('sparre_sel') ;
}
function stargate_click(image) {
alert('Image clicked' +
image.id);
}
function setstargate_click(ev) {
var X ;
var Y ;
ev = ev || window.event;
if(ev.pageX || ev.pageY){
X = ev.pageX - stargatebaseX ;
Y = ( ev.pageY - stargatebaseY );
} else {
X = ev.x - stargatebaseX ;
Y = ( ev.y - stargatebaseY );
}
for ( var i = 0 ; i < stargate_arrayX.length ; i++ ) {
if ( pnpoly(stargate_arrayX[i],stargate_arrayY[i],X, Y) ) {
// alert(' glyph * ' + (i<10?'0':'')+(i+1) + ' * selected' );
document.getElementById('sparreclick').innerHTML = 'Sparre ' +
( i<9 ? '0':'')+(i+1)+' set ' ;
sparre_sel.src='images/glyph'+( i<9 ? '0':'')+(i+1)+'.sel.gif' ;
if (i==30) {
//alert('sparre 30');
document.getElementById('stargate_picture').src = 'gate.opened.png' ;
}
if (document.all) { // IE
sparre_sel.style.posTop = ( stargate_sparre_arrayY[i] +
stargatebaseY ) ;
sparre_sel.style.posLeft = ( stargate_sparre_arrayX[i] +
stargatebaseX ) ;
} else {
sparre_sel.style.top = ( stargate_sparre_arrayY[i] +
stargatebaseY ) + 'px' ;
sparre_sel.style.left = ( stargate_sparre_arrayX[i] +
stargatebaseX ) + 'px' ;
}
}
}
// alert('Position = ' + X + ' , ' + Y );
// alert (' in poly 1 ? ' +
pnpoly(stargate_arrayX[0],stargate_arrayY[0],X, Y) );
// alert (' in poly 2 ? ' +
pnpoly(stargate_arrayX[1],stargate_arrayY[1],X, Y) );
}
function pnpoly(xp,yp,x, y) {
var npol = xp.length;
var i, j, c = false;
for (i = 0, j = npol-1; i < npol; j = i++) {
if ((((yp[i] <= y) && (y < yp[j])) || ((yp[j] <= y) && (y < yp[i]))) && (x <
(xp[j] - xp[i]) * (y - yp[i]) / (yp[j] - yp[i]) + xp[i])) c =!c;
}
return c;
}
------------------------
Have fun.