Avatar billede henrik6666 Nybegynder
11. september 2006 - 20:55 Der er 11 kommentarer og
1 løsning

Flere mouseover

Nedenstående script (stykker af det) kan ved mouseover vise et layer og ved mouseout få det til at forsvinde igen ..men hvad nu hvis jeg gerne vil bruge scriptet flere steder på min side !? Nogen der kan hjælpe mig til at få scriptet modificeret ?

#layer {
  position:absolute;
  top:55px;
  left:376px;
  width:204px;
  height:154px;
  border:none;
  background-color:#353535;
  display:none;
}


<script type="text/javascript">
var over = 0;
function mIn(){
  over = 1;
  document.getElementById('layer').style.display='block';
}
function mOut(){
  over = 0;
  setTimeout('hide()',100);
}
function hide(){
  if(over==0)document.getElementById('layer').style.display='none';
}
function tdOver(td,d){
  tds = document.getElementById("layer").getElementsByTagName("TD");
  for(i=0;tds.length>i;i++){
    tds[i].style.backgroundColor = (tds[i]!=td||d)?"transparent":"#870014";
  }
}
</script>


<div onmouseover="mIn();" onmouseout="mOut();" style="position:absolute;top:35px;left:376px;cursor:default;">Vis</div>

<div id="layer" onmouseover="mIn();" onmouseout="mOut();"></div>
Avatar billede henrik6666 Nybegynder
11. september 2006 - 20:58 #1
-> Fundet herfra hvis dette skulle ha' interesse :

http://www.eksperten.dk/spm/516646
Avatar billede Slettet bruger
11. september 2006 - 21:00 #2
Så skal du lave din function med et parameter.
Altså:


<script type="text/javascript">
var over = 0;
function mIn(id){
  over = 1;
  document.getElementById(id).style.display='block';
}
function mOut(id){
  over = 0;
  setTimeout('hide(getElementById(id))',100);
}
function hide(id){
  if(over==0)document.getElementById('layer').style.display='none';
}
function tdOver(id, td,d){
  tds = document.getElementById(id).getElementsByTagName("TD");
  for(i=0;tds.length>i;i++){
    tds[i].style.backgroundColor = (tds[i]!=td||d)?"transparent":"#870014";
  }
}
</script>


<div onmouseover="mIn(this);" onmouseout="mOut(this);" style="position:absolute;top:35px;left:376px;cursor:default;">Vis</div>

<div id="layer" onmouseover="mIn(this);" onmouseout="mOut(this);"></div>
Avatar billede henrik6666 Nybegynder
11. september 2006 - 21:21 #3
Det kan jeg ikke lige overskue .. desuden får jeg en fejl

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<head>
<title></title>
<style type="text/css">
#layer {
  position:absolute;
  top:55px;
  left:376px;
  width:204px;
  height:154px;
  border:none;
  background-color:#353535;
  display:none;
}
</style>
<script type="text/javascript">
var over = 0;
function mIn(id){
  over = 1;
  document.getElementById(id).style.display='block';
}
function mOut(id){
  over = 0;
  setTimeout('hide(getElementById(id))',100);
}
function hide(id){
  if(over==0)document.getElementById('layer').style.display='none';
}
function tdOver(id, td,d){
  tds = document.getElementById(id).getElementsByTagName("TD");
  for(i=0;tds.length>i;i++){
    tds[i].style.backgroundColor = (tds[i]!=td||d)?"transparent":"#870014";
  }
}
</script>
</head>

<body>

<div onmouseover="mIn(this);" onmouseout="mOut(this);" style="position:absolute;top:35px;left:376px;cursor:default;">Vis</div>
<div id="layer" onmouseover="mIn(this);" onmouseout="mOut(this);"></div>

</body>
</html>
Avatar billede soes Nybegynder
11. september 2006 - 22:55 #4
Har du evt. prøvet med:
<style type="text/css">
#layer {
  position:absolute;
  top:55px;
  left:376px;
  width:204px;
  height:154px;
  border:none;
  background-color:#353535;
  display:none;
}
</style>
<script type="text/javascript">
var over = 0;
function mIn(sender){
  over = 1;
  sender.style.display='block';
}
function mOut(sender){
  over = 0;
  setTimeout('hide(sender)',100);
}
function hide(sender){
  if(over==0)
    sender.style.display='none';
}
function tdOver(sender, td,d){
  tds = sender.getElementsByTagName("TD");
  for(i=0;tds.length>i;i++){
    tds[i].style.backgroundColor = (tds[i]!=td||d)?"transparent":"#870014";
  }
}
</script>

Ikke testet eller noget.
Forskellen er at du bruger referencen fra det objekt hvor handlingen sker, istedet for at forsøge at hente den via document.get...
Avatar billede henrik6666 Nybegynder
11. september 2006 - 23:24 #5
Nu er det ikke lige javascript der er min stærke side men jeg forsøgte dog alligevel men med samme resultat - fejl på siden. Måske det ikke virker eller også gør jeg noget forkert ..
Avatar billede mclemens Nybegynder
12. september 2006 - 10:47 #6
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<style type="text/css">
#layer {
  position:absolute;
  top:55px;
  left:376px;
  width:204px;
  height:154px;
  border:none;
  background-color:#353535;
  display:none;
}

#layer2 {
  position:absolute;
  top:55px;
  left:176px;
  width:204px;
  height:154px;
  border:none;
  background-color:#353535;
  display:none;
}
</style>

<script type="text/javascript">
var objelm = {};

function mIn(t){
  objelm[t]= {};
  objelm[t].over= 1;
  objelm[t].id=t 
  document.getElementById(t).style.display='block';
}

function mOut(t){
  objelm[t].over = 0; 
  setTimeout('hide("'+objelm[t].id+'")',100);
}


function hide(t){
  if(objelm[t].over==0)document.getElementById(t).style.display='none';
}


function tdOver(td,d){
  tds = document.getElementById("layer").getElementsByTagName("TD");
  for(i=0;tds.length>i;i++){
    tds[i].style.backgroundColor = (tds[i]!=td||d)?"transparent":"#870014";
  }
}
</script>

</head><body>
<div onmouseover="mIn('layer');" onmouseout="mOut('layer');" style="position:absolute;top:35px;left:376px;cursor:default;">Vis</div>

<div id="layer" onmouseover="mIn('layer');" onmouseout="mOut('layer');"></div>


<div onmouseover="mIn('layer2');" onmouseout="mOut('layer2');" style="position:absolute;top:35px;left:176px;cursor:default;">Vis</div>

<div id="layer2" onmouseover="mIn('layer2');" onmouseout="mOut('layer2');"></div>
</body></html>
Avatar billede mclemens Nybegynder
12. september 2006 - 11:20 #7
Ved ikke med deb tdOver , har du et eksempel på
hvordan du normalt laver opkaldet til den ?
- Og i hvilken fordelse den bruges ?
(kan godt se det er til en tabel - men et eksempel
på kaldet til funktionen vil hjælpe ...)
Avatar billede mclemens Nybegynder
12. september 2006 - 11:27 #8
Et eksempel kunne være:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<style type="text/css">
#layer {
  position:absolute;
  top:55px;
  left:376px;
  width:204px;
  height:154px;
  border:none;
  background-color:#353535;
  display:none;
}

#layer2 {
  position:absolute;
  top:55px;
  left:176px;
  width:204px;
  height:154px;
  border:none;
  background-color:#353535;
  display:none;
}
</style>

<script type="text/javascript">
var objelm = {};

function mIn(t){
  var runtds=(objelm[t]==undefined);
  objelm[t]= {};
  objelm[t].over= 1;
  objelm[t].id=t 
  document.getElementById(t).style.display='block';
  if(runtds)tdOver(t)
}

function mOut(t){
  objelm[t].over = 0; 
  setTimeout('hide("'+objelm[t].id+'")',100);
}


function hide(t){
  if(objelm[t].over==0)document.getElementById(t).style.display='none';
}


function tdOver(t){
  tds = document.getElementById(t).getElementsByTagName("td");
  for(i=0,i2=tds.length;i<i2;i++){
    tds[i].onmouseover=function(){coltd(this,false);};
    tds[i].onmouseout=function(){coltd(this,true);};
  }
}

function coltd(elm,d){
  elm.style.backgroundColor=(d)?"transparent":"#870014";
}

</script>

</head><body>
<div onmouseover="mIn('layer');" onmouseout="mOut('layer');" style="position:absolute;top:35px;left:376px;cursor:default;">Vis</div>

<div id="layer" onmouseover="mIn('layer');" onmouseout="mOut('layer');">
<table><tr><td>a</td><td>b</td></tr></table>
</div>



<div onmouseover="mIn('layer2');" onmouseout="mOut('layer2');" style="position:absolute;top:35px;left:176px;cursor:default;">Vis</div>

<div id="layer2" onmouseover="mIn('layer2');" onmouseout="mOut('layer2');">
<table><tr><td>a</td><td>b</td></tr></table></div>
</body></html>


.... men det er som sagt et skud i tågen ...
Avatar billede mclemens Nybegynder
12. september 2006 - 11:33 #9
Mindre forkortelse:



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<style type="text/css">
#layer {
  position:absolute;
  top:55px;
  left:376px;
  width:204px;
  height:154px;
  border:none;
  background-color:#353535;
  display:none;
}

#layer2 {
  position:absolute;
  top:55px;
  left:176px;
  width:204px;
  height:154px;
  border:none;
  background-color:#353535;
  display:none;
}
</style>

<script type="text/javascript">
var objelm = {};

function mIn(t){
  var runtds=(objelm[t]==undefined);
  objelm[t]= {};
  objelm[t].over= 1;
  document.getElementById(t).style.display='block';
  if(runtds)tdOver(t)
}

function mOut(t){
  objelm[t].over = 0; 
  setTimeout('hide("'+t+'")',100);
}


function hide(t){
  if(objelm[t].over==0)document.getElementById(t).style.display='none';
}


function tdOver(t){
  tds = document.getElementById(t).getElementsByTagName("td");
  for(i=0,i2=tds.length;i<i2;i++){
    tds[i].onmouseover=function(){coltd(this,false);};
    tds[i].onmouseout=function(){coltd(this,true);};
  }
}

function coltd(elm,d){
  elm.style.backgroundColor=(d)?"transparent":"#870014";
}

</script>

</head><body>
<div onmouseover="mIn('layer');" onmouseout="mOut('layer');" style="position:absolute;top:35px;left:376px;cursor:default;">Vis</div>

<div id="layer" onmouseover="mIn('layer');" onmouseout="mOut('layer');">
<table><tr><td>a</td><td>b</td></tr></table>
</div>



<div onmouseover="mIn('layer2');" onmouseout="mOut('layer2');" style="position:absolute;top:35px;left:176px;cursor:default;">Vis</div>

<div id="layer2" onmouseover="mIn('layer2');" onmouseout="mOut('layer2');">
<table><tr><td>a</td><td>b</td></tr></table></div>
</body></html>
Avatar billede mclemens Nybegynder
12. september 2006 - 11:36 #10
objelm[t]= {};
  objelm[t].over= 1;
i function mIn(t) kan også reduceres til:
  objelm[t]= {"over":1};
Avatar billede henrik6666 Nybegynder
12. september 2006 - 18:16 #11
Hej

Scriptet er "født" med en table løsning - se link lidt længere oppe.

Mht dit forslag så virker det fremragende (IE,FF,OP,NS) -->Mange tak for hjælpen !

Scriptet er egentligt ganske smart hvis man kan se mulighederne i det :o) så jeg tænkte på om vi ikke skulle få det til at virke med table også :-) Der er lidt gal med hoover effekten så det kun er 'layer' der får hoover.


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title></title>

<style type="text/css">
#layer {
  position:absolute;
  top:55px;
  left:100px;
  width:204px;
  height:154px;
  border:none;
  background-color:#353535;
  display:none;
}
#layer table{
  width:95%;
  border:0px;
  border-collapse:collapse;
  /*text-align:center;*/
}
#layer td{
  padding:1px;
  border:0px;
  margin:0px;
  font-family:verdana,sans-serif;
  color:#fff;
  font-size:xx-small;
  background-color:transparent;
  cursor:pointer;
  cursor:hand;
}

#layer2 {
  position:absolute;
  top:55px;
  left:400px;
  width:204px;
  height:154px;
  border:none;
  background-color:#353535;
  display:none;
}

#layer2 table{
  width:95%;
  border:0px;
  border-collapse:collapse;
  /*text-align:center;*/
}
#layer2 td{
  padding:1px;
  border:0px;
  margin:0px;
  font-family:verdana,sans-serif;
  color:#fff;
  font-size:xx-small;
  background-color:transparent;
  cursor:pointer;
  cursor:hand;
}
</style>

<script type="text/javascript">
var objelm = {};

function mIn(t){
  objelm[t]= {};
  objelm[t].over= 1;
  objelm[t].id=t 
  document.getElementById(t).style.display='block';
}

function mOut(t){
  objelm[t].over = 0; 
  setTimeout('hide("'+objelm[t].id+'")',100);
}


function hide(t){
  if(objelm[t].over==0)document.getElementById(t).style.display='none';
}


function tdOver(td,d){
  tds = document.getElementById("layer").getElementsByTagName("TD");
  for(i=0;tds.length>i;i++){
    tds[i].style.backgroundColor = (tds[i]!=td||d)?"transparent":"#870014";
  }
}
</script>

</head>
<body>
<div onmouseover="mIn('layer');" onmouseout="mOut('layer');" style="position:absolute;top:35px;left:100px;cursor:default;">Vis</div>
<div id="layer" onmouseover="mIn('layer');" onmouseout="mOut('layer');">
  <table>
    <tr>
      <td onmouseover="tdOver(this,false);" onmouseout="tdOver(this,true);" onclick="location.href='show.asp?page=gallery00001'">Gallery 00001 / 00026</td>
    </tr>
    <tr>
      <td onmouseover="tdOver(this,false);" onclick="location.href='show.asp?page=gallery00027'">Gallery 00027 / 00031</td>
    </tr>
    <tr>
      <td onmouseover="tdOver(this,false);" onclick="location.href='show.asp?page=gallery00032'">Gallery 00032 / 00037</td>
    </tr>
    <tr>
      <td onmouseover="tdOver(this,false);" onclick="location.href='show.asp?page=gallery00038'">Gallery 00038 / 00040</td>
    </tr>
    <tr>
      <td onmouseover="tdOver(this,true);" style="cursor:default;">--------------------------------------</td>
    </tr>
    <tr>
      <td onmouseover="tdOver(this,false);" onclick="location.href='show.asp?page=about'">About</td>
    </tr>
    <tr>
      <td onmouseover="tdOver(this,false);"  onmouseout="tdOver(this,true);" onclick="location.href='show.asp?page=contact'">Contact</td>
    </tr>
  </table>
</div>

<div onmouseover="mIn('layer2');" onmouseout="mOut('layer2');" style="position:absolute;top:35px;left:400px;cursor:default;">Vis</div>
<div id="layer2" onmouseover="mIn('layer2');" onmouseout="mOut('layer2');">
  <table>
    <tr>
      <td onmouseover="tdOver(this,false);" onmouseout="tdOver(this,true);" onclick="location.href='show.asp?page=gallery00001'">Gallery 00001 / 00026</td>
    </tr>
    <tr>
      <td onmouseover="tdOver(this,false);" onclick="location.href='show.asp?page=gallery00027'">Gallery 00027 / 00031</td>
    </tr>
    <tr>
      <td onmouseover="tdOver(this,false);" onclick="location.href='show.asp?page=gallery00032'">Gallery 00032 / 00037</td>
    </tr>
    <tr>
      <td onmouseover="tdOver(this,false);" onclick="location.href='show.asp?page=gallery00038'">Gallery 00038 / 00040</td>
    </tr>
    <tr>
      <td onmouseover="tdOver(this,true);" style="cursor:default;">--------------------------------------</td>
    </tr>
    <tr>
      <td onmouseover="tdOver(this,false);" onclick="location.href='show.asp?page=about'">About</td>
    </tr>
    <tr>
      <td onmouseover="tdOver(this,false);"  onmouseout="tdOver(this,true);" onclick="location.href='show.asp?page=contact'">Contact</td>
    </tr>
  </table>
</div>
</body>
</html>
Avatar billede mclemens Nybegynder
12. september 2006 - 18:45 #12
Velbekom, og tak for point :)



Her er to valg muligheder...

1. ret scriptet i ovenstående til dette:
function tdOver(td,d){
  tabs=["layer","layer2"];
  for(j=0;j<tabs.length;j++){
  tds = document.getElementById(tabs[j]).getElementsByTagName("TD");
  for(i=0;tds.length>i;i++){
    tds[i].style.backgroundColor = (tds[i]!=td||d)?"transparent":"#870014";
  }}
}


2. Brug denne her:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title></title>

<style type="text/css">
#layer {
  position:absolute;
  top:55px;
  left:100px;
  width:204px;
  height:154px;
  border:none;
  background-color:#353535;
  display:none;
}
#layer table{
  width:95%;
  border:0px;
  border-collapse:collapse;
  /*text-align:center;*/
}
#layer td{
  padding:1px;
  border:0px;
  margin:0px;
  font-family:verdana,sans-serif;
  color:#fff;
  font-size:xx-small;
  background-color:transparent;
  cursor:pointer;
  cursor:hand;
}

#layer2 {
  position:absolute;
  top:55px;
  left:400px;
  width:204px;
  height:154px;
  border:none;
  background-color:#353535;
  display:none;
}

#layer2 table{
  width:95%;
  border:0px;
  border-collapse:collapse;
  /*text-align:center;*/
}
#layer2 td{
  padding:1px;
  border:0px;
  margin:0px;
  font-family:verdana,sans-serif;
  color:#fff;
  font-size:xx-small;
  background-color:transparent;
  cursor:pointer;
  cursor:hand;
}
</style>


<script type="text/javascript">
var objelm = {};

function mIn(t){
  var runtds=(objelm[t]==undefined);
  objelm[t]= {"over":1};
  document.getElementById(t).style.display='block';
  if(runtds)tdOver(t)
}

function mOut(t){
  objelm[t].over = 0;
  setTimeout('hide("'+t+'")',100);
}


function hide(t){
  if(objelm[t].over==0)document.getElementById(t).style.display='none';
}


function tdOver(t){
  tds = document.getElementById(t).getElementsByTagName("td");
  for(i=0,i2=tds.length;i<i2;i++){
    tds[i].onmouseover=function(){coltd(this,false);};
    tds[i].onmouseout=function(){coltd(this,true);};
  }
}

function coltd(elm,d){
  elm.style.backgroundColor=(d)?"transparent":"#870014";
}
</script>

</head><body>

<div onmouseover="mIn('layer');" onmouseout="mOut('layer');" style="position:absolute;top:35px;left:100px;cursor:default;">Vis</div>
<div id="layer" onmouseover="mIn('layer');" onmouseout="mOut('layer');">
  <table>
    <tr>
      <td onclick="location.href='show.asp?page=gallery00001'">Gallery 00001 / 00026</td>
    </tr>
    <tr>
      <td onclick="location.href='show.asp?page=gallery00027'">Gallery 00027 / 00031</td>
    </tr>
    <tr>
      <td onclick="location.href='show.asp?page=gallery00032'">Gallery 00032 / 00037</td>
    </tr>
    <tr>
      <td onclick="location.href='show.asp?page=gallery00038'">Gallery 00038 / 00040</td>
    </tr>
    <tr>
      <td style="cursor:default;">--------------------------------------</td>
    </tr>
    <tr>
      <td onclick="location.href='show.asp?page=about'">About</td>
    </tr>
    <tr>
      <td onclick="location.href='show.asp?page=contact'">Contact</td>
    </tr>
  </table>
</div>

<div onmouseover="mIn('layer2');" onmouseout="mOut('layer2');" style="position:absolute;top:35px;left:400px;cursor:default;">Vis</div>
<div id="layer2" onmouseover="mIn('layer2');" onmouseout="mOut('layer2');">
  <table>
    <tr>
      <td onclick="location.href='show.asp?page=gallery00001'">Gallery 00001 / 00026</td>
    </tr>
    <tr>
      <td onclick="location.href='show.asp?page=gallery00027'">Gallery 00027 / 00031</td>
    </tr>
    <tr>
      <td onclick="location.href='show.asp?page=gallery00032'">Gallery 00032 / 00037</td>
    </tr>
    <tr>
      <td onclick="location.href='show.asp?page=gallery00038'">Gallery 00038 / 00040</td>
    </tr>
    <tr>
      <td style="cursor:default;">--------------------------------------</td>
    </tr>
    <tr>
      <td onclick="location.href='show.asp?page=about'">About</td>
    </tr>
    <tr>
      <td onclick="location.href='show.asp?page=contact'">Contact</td>
    </tr>
  </table>
</div>
</body>
</html>



1. Har ulempen at det skal gennemløbe alle td i begge tabeller og nulstille farven ved hver mouseover på et felt (det kan reduceres til kun at skulle gennemløbe farver i den ene tabel ved at sende en tekst variabel med over til funktionen fra hver onmouseover opkald ...

2. Skal måske lige validere på en rel attribut om hvorvidt onmouseover og onmouseout begge skal tildeles eller om det kun er den ene ... det er ikke nogen ulempe som sådan da det kan ordnes ... Evt. skal onmouseover og out tildelingen ske ved onload af vinduet da nogle tabeller måske er synlige fra start - det kan også ordnes ...

Mvh, Clemme :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester