Avatar billede ripley Nybegynder
02. september 2008 - 09:46 Der er 2 kommentarer og
1 løsning

Hvordan beregner jeg en fast afstand i dette script

Hej!

Jeg bruger følgende javascript ... til at genere mouse-over-tips med.
Det fungerer fint, bortset fra at jeg godt kunne tænke mig at "låse" tooltipsene, så de stod på samme afstand fra venstre side af skærmbilledet - i forhold til skærmopløsning.

Jeg er godt klar over at jeg skal sætte "tipcss.left" - men hvordan laver jeg en ny beregning, så tooltippet altid har samme X-værdi - men altså uden at være et fast antal pixels, men i forhold til skærmopløsningen?

Kan man dét?

/*
Image w/ description tooltip- By Dynamic Web Coding (www.dyn-web.com)
Copyright 2002 by Sharon Paine
Visit http://www.dynamicdrive.com for this script
*/
var dom = (document.getElementById) ? true : false;
var ns5 = ((navigator.userAgent.indexOf("Gecko")>-1) && dom) ? true: false;
var ie5 = ((navigator.userAgent.indexOf("MSIE")>-1) && dom) ? true : false;
var ns4 = (document.layers && !dom) ? true : false;
var ie4 = (document.all && !dom) ? true : false;
var nodyn = (!ns5 && !ns4 && !ie4 && !ie5) ? true : false;

// resize fix for ns4
var origWidth, origHeight;
if (ns4) {
    origWidth = window.innerWidth; origHeight = window.innerHeight;
    window.onresize = function() { if (window.innerWidth != origWidth || window.innerHeight != origHeight) history.go(0); }
}

// avoid error of passing event object in older browsers
if (nodyn) { event = "nope" }

///////////////////////  CUSTOMIZE HERE  ////////////////////
// settings for tooltip
// Do you want tip to move when mouse moves over link?
var tipFollowMouse= true;   
// Be sure to set tipWidth wide enough for widest image
//var tipWidth= 200;
var offX= 20;    // how far from mouse to show tip
var offY= 12;
//var tipFontFamily= "Verdana, arial, helvetica, sans-serif";
//var tipFontSize= "8pt";
// set default text color and background color for tooltip here
// individual tooltips can have their own (set in messages arrays)
// but don't have to
//var tipFontColor= "#000000";
//var tipBgColor= "#DDECFF";
var tipBorderColor= "#000000";
var tipBorderWidth= 1;
var tipBorderStyle= "solid";
var tipPadding= 0;
var tipSpacing= 0;

// tooltip content goes here (image, description, optional bgColor, optional textcolor)
var messages = new Array();
// multi-dimensional arrays containing:
// image and text for tooltip
// optional: bgColor and color to be sent to tooltip

////////////////////  END OF CUSTOMIZATION AREA  ///////////////////

// to layout image and text, 2-row table, image centered in top cell
// these go in var tip in doTooltip function
// startStr goes before image, midStr goes between image and text

//Fast defineret bredde
//var startStr2 = '<table cellspacing="0%" cellpadding="0%" width="' + tipWidth + '"><tr><td class="clsContentCellB2 clsTxtNormalC">';
//var startStr = '<table cellspacing="0%" cellpadding="0%" width="' + tipWidth + '"><tr><td class="clsContentCellB clsTxtNormalC">';

//Variabel bredde
var startStr2 = '<table cellspacing="0%" cellpadding="0%"><tr><td class="clsContentCellB2 clsTxtNormalC">';
var startStr = '<table cellspacing="0%" cellpadding="0%"><tr><td class="clsContentCellB clsTxtNormalC">';
var endStr = '</td></tr></table>';

////////////////////////////////////////////////////////////
//  initTip    - initialization for tooltip.
//        Global variables for tooltip.
//        Set styles for all but ns4.
//        Set up mousemove capture if tipFollowMouse set true.
////////////////////////////////////////////////////////////
var tooltip, tipcss;
function initTip() {
    if (nodyn) return;
    tooltip = (ns4)? document.tipDiv.document: (ie4)? document.all['tipDiv']: (ie5||ns5)? document.getElementById('tipDiv'): null;
    tipcss = (ns4)? document.tipDiv: tooltip.style;
    if (ie4||ie5||ns5) {    // ns4 would lose all this on rewrites
        //tipcss.width = tipWidth+"px";
        //tipcss.fontFamily = tipFontFamily;
        //tipcss.fontSize = tipFontSize;
        //tipcss.color = tipFontColor;
        //tipcss.backgroundColor = tipBgColor;
        tipcss.borderColor = tipBorderColor;
        tipcss.borderWidth = tipBorderWidth+"px";
        tipcss.padding = tipPadding+"px";
        //tipcss.spacing = tipSpacing+"px";   
        tipcss.borderStyle = tipBorderStyle;
    }
    if (tooltip&&tipFollowMouse) {
        if (ns4) document.captureEvents(Event.MOUSEMOVE);
        document.onmousemove = trackMouse;
    }
}

/////////////////////////////////////////////////
//  doTooltip function
//            Assembles content for tooltip and writes
//            it to tipDiv
/////////////////////////////////////////////////
var t1,t2;    // for setTimeouts
var tipOn = false;    // check if over tooltip link
function doTooltip(evt, tekst, num) {
  if(!tooltip){
    initTip();
  }
  if (!tooltip) return;
    if (t1) clearTimeout(t1);    if (t2) clearTimeout(t2);
    tipOn = true;
    // set colors if included in messages array
    if (ns4) {
      //no width
        var tip = '<table bgcolor="' + tipBorderColor + '" cellspacing="0" cellpadding="0" border="0"><tr><td><table width="100%" cellspacing="0" cellpadding="'+ tipBorderWidth +'" border="0"><tr><td>'+ startStr + tekst + endStr + '</td></tr></table></td></tr></table>';
        //with width
    //var tip = '<table bgcolor="' + tipBorderColor + '" width="' + tipWidth + '" cellspacing="0" cellpadding="0" border="0"><tr><td><table width="100%" cellspacing="0" cellpadding="'+ tipBorderWidth +'" border="0"><tr><td>'+ startStr + tekst + endStr + '</td></tr></table></td></tr></table>';
        tooltip.write(tip);
        tooltip.close();
    } else if (ie4||ie5||ns5){
        var tip;
        if(num%2==0){
        tip = startStr + tekst + endStr;
        }    else{
          tip = startStr2 + tekst + endStr;
        }
        tooltip.innerHTML = tip;
    }
    if (!tipFollowMouse) positionTip(evt);
    else t1=setTimeout("tipcss.visibility='visible'",100);

}

var mouseX, mouseY;
function trackMouse(evt) {
    mouseX = (ns4||ns5)? evt.pageX: window.event.clientX + document.body.scrollLeft;
    mouseY = (ns4||ns5)? evt.pageY: window.event.clientY + document.body.scrollTop;
    if (tipOn) positionTip(evt);
}

/////////////////////////////////////////////////////////////
//  positionTip function
//        If tipFollowMouse set false, so trackMouse function
//        not being used, get position of mouseover event.
//        Calculations use mouseover event position,
//        offset amounts and tooltip width to position
//        tooltip within window.
/////////////////////////////////////////////////////////////
function positionTip(evt) {
    if (!tipFollowMouse) {
        mouseX = (ns4||ns5)? evt.pageX: window.event.clientX + document.body.scrollLeft;
        mouseY = (ns4||ns5)? evt.pageY: window.event.clientY + document.body.scrollTop;
    }
    // tooltip width and height
    var tpWd = (ns4)? tooltip.width: (ie4||ie5)? tooltip.clientWidth: tooltip.offsetWidth;
    var tpHt = (ns4)? tooltip.height: (ie4||ie5)? tooltip.clientHeight: tooltip.offsetHeight;
    // document area in view (subtract scrollbar width for ns)
    var winWd = (ns4||ns5)? window.innerWidth-20+window.pageXOffset: document.body.clientWidth+document.body.scrollLeft;
    var winHt = (ns4||ns5)? window.innerHeight-20+window.pageYOffset: document.body.clientHeight+document.body.scrollTop;
    // check mouse position against tip and window dimensions
    // and position the tooltip
    if ((mouseX+offX+tpWd)>winWd)
        tipcss.left = (ns4)? mouseX-(tpWd+offX): mouseX-(tpWd+offX)+"px";
    else tipcss.left = (ns4)? mouseX+offX: mouseX+offX+"px";
    if ((mouseY+offY+tpHt)>winHt)
        tipcss.top = (ns4)? winHt-(tpHt+offY): winHt-(tpHt+offY)+"px";
    else tipcss.top = (ns4)? mouseY+offY: mouseY+offY+"px";
    if (!tipFollowMouse) t1=setTimeout("tipcss.visibility='visible'",100);
}

function hideTip() {
    if (!tooltip) return;
    t2 = setTimeout("tipcss.visibility='hidden'",100);
    tipOn = false;
}
Avatar billede w13 Novice
02. september 2008 - 14:58 #1
Så angiver du det vel bare i % i stedet for px?
Avatar billede ripley Nybegynder
03. september 2008 - 14:26 #2
Nej, den gik ikke .. men jeg fandt ud af en løsning:

tipcss.left = (ns4)? mouseX-(tpWd+offX): mouseX-(tpWd+offX)+"px";

Her fjerner jeg bare tpWd fra begge ligninger, så passer det :o)
Avatar billede ripley Nybegynder
03. september 2008 - 14:26 #3
Jeg lukker
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