Struppi: Tooltip Fensterrand-Problem

Beitrag lesen

<html>

Hier fehlt schon mal der DOCTYPE

<head>
<style type="text/css">
.tooltiptitle {color: #ffffff; font-family: verdana; font-weight: bold; font-size: 7pt}

7pt dürfte auf den meisten Rechnern nicht mehr lesbar sein. 'pt' ist sowieso keine Größe die für den Monitor verwendung finden sollte. 'px' ist die Einheit, die der Monitor darstellt

<script language = "javascript">

Da fehlt das type Attribut.

<!--
var ie = document.all ? 1 : 0
var ns = document.layers ? 1 : 0

und hier hast du schon mal ein Problem, da das Skript im Prinzip nur auf 4'er Browser testet und alle modernen Browser aussen vor läßt.

function MoveToolTip(layerName, FromTop, FromLeft, e){
if(ie){eval(doc + layerName + sty + ".top = "  + (eval(FromTop) + document.body.scrollTop))}
if(ns){eval(doc + layerName + sty + ".top = "  +  eval(FromTop))}
eval(doc + layerName + sty + ".left = " + (eval(FromLeft) + 15))
}

diese eval Orgie ist sehr fehleranfällig, langsam und schwer zu debuggen. sinnvoller ist es die Funktionen hier abzufragen, anstatt Strings zu verwenden:

function MoveToolTip(layerName, FromTop, FromLeft, e){
var style;
if(document.getElementById) // moderne Browser
{
style = document.getElementById(layerName).style;
else if(document.layers) // NN 4.x
{
style = document.layers[layerNAme];
}
else if(document.all) // alter IE
{
style = document.all[layerName].style;
}
style.top = .....

....
}

Tja, das ist die Frage, was du hier in Wirklichkeit machst. FromTop ist ein String, in dem 'Name' statt durch eval(FromTop) soll wohl ein Objekt erzeugt werden, das es aber nicht gibt (wie gesagt eval ist sowieso schlecht und in 99% der Fälle auch überflüssig, aber hier verhindert es noch einen Fehler zu finden)

Hier wirst du auch die Änderung für dein Anliegen einbauen können, du musst nur den Layer in den sichtbaren Bereich verschieben, dazu musst du Wissen wie breit dein angezeigter Bereich ist mit Hilfe von window.innerWidth oder document.body.clientWidth.

function ReplaceContent(layerName){
if(ie){document.all[layerName].innerHTML = ContentInfo}
if(ns){
with(document.layers[layerName].document)
{
   open();
   write(ContentInfo);
   close();

auch das läuft in neuen Browsern nicht.

Das Skript bedarf einer gründlichen Überarbeitung.

Struppi.