Webdesign in Siegen

javascript mutation

Fragen zum Thema JavaScript können hier gestellt werden

Moderatoren: Basti, Ingo

javascript mutation

Beitragvon sadcrow am 22.03.2008, 23:27

hi

hab folgenden Scriptcode:

Code: Alles auswählen
addEvent(window, "load", makeNiceTitles);

var XHTMLNS = "http://www.w3.org/1999/xhtml";
var CURRENT_NICE_TITLE;
var browser = new Browser();

function makeNiceTitles() {
    if (!document.createElement || !document.getElementsByTagName) return;
    // add namespace methods to HTML DOM; this makes the script work in both
    // HTML and XML contexts.
    if(!document.createElementNS)
    {
        document.createElementNS = function(ns,elt) {
            return document.createElement(elt);
        }
    }

    if( !document.links )
    {
        document.links = document.getElementsByTagName("a");
    }
    for (var ti=0;ti<document.links.length;ti++) {
        var lnk = document.links[ti];
        if (lnk.title) {
            lnk.setAttribute("nicetitle",lnk.title);
            lnk.removeAttribute("title");
            addEvent(lnk,"mouseover",showNiceTitle);
            addEvent(lnk,"mouseout",hideNiceTitle);
            addEvent(lnk,"focus",showNiceTitle);
            addEvent(lnk,"blur",hideNiceTitle);
        }
    }
    var instags = document.getElementsByTagName("ins");
    if (instags) {
    for (var ti=0;ti<instags.length;ti++) {
        var instag = instags[ti];
        if (instag.dateTime) {
            var strDate = instag.dateTime;
            var dtIns = new Date(strDate.substring(0,4),parseInt(strDate.substring(4,6)-1),strDate.substring(6,8),strDate.substring(9,11),strDate.substring(11,13),strDate.substring(13,15));
            instag.setAttribute("nicetitle","Added on "+dtIns.toString());
            addEvent(instag,"mouseover",showNiceTitle);
            addEvent(instag,"mouseout",hideNiceTitle);
            addEvent(instag,"focus",showNiceTitle);
            addEvent(instag,"blur",hideNiceTitle);
        }
    }
    }
}

function findPosition( oLink ) {
  if( oLink.offsetParent ) {
    for( var posX = 0, posY = 0; oLink.offsetParent; oLink = oLink.offsetParent ) {
      posX += oLink.offsetLeft;
      posY += oLink.offsetTop;
    }
    return [ posX, posY ];
  } else {
    return [ oLink.x, oLink.y ];
  }
}

function showNiceTitle(e) {
    if (CURRENT_NICE_TITLE) hideNiceTitle(CURRENT_NICE_TITLE);
    if (!document.getElementsByTagName) return;
    if (window.event && window.event.srcElement) {
        lnk = window.event.srcElement
    } else if (e && e.target) {
        lnk = e.target
    }
    if (!lnk) return;
    if (lnk.nodeName.toUpperCase() != 'A') {
        // lnk is not actually the link -- ascend parents until we hit a link
        lnk = getParent(lnk,"A");
    }
    if (!lnk) return;
    nicetitle = lnk.getAttribute("nicetitle");
   
    var d = document.createElementNS(XHTMLNS,"div");
    d.className = "nicetitle";
    tnt = document.createTextNode(nicetitle);
    pat = document.createElementNS(XHTMLNS,"p");
    pat.className = "titletext";
    pat.appendChild(tnt);
    d.appendChild(pat);
    if (lnk.href) {
        tnd = document.createTextNode(lnk.href);
        pad = document.createElementNS(XHTMLNS,"p");
        pad.className = "destination";
        pad.appendChild(tnd);
        d.appendChild(pad);
    }
   
    STD_WIDTH = 300;
    if (lnk.href) {
        h = lnk.href.length;
    } else { h = nicetitle.length; }
    if (nicetitle.length) {
      t = nicetitle.length;
    }
    h_pixels = h*6; t_pixels = t*10;
   
    if (h_pixels > STD_WIDTH) {
        w = h_pixels;
    } else if ((STD_WIDTH>t_pixels) && (t_pixels>h_pixels)) {
        w = t_pixels;
    } else if ((STD_WIDTH>t_pixels) && (h_pixels>t_pixels)) {
        w = h_pixels;
    } else {
        w = STD_WIDTH;
    }
       
    d.style.width = w + 'px';   

    /*
    mx = lnk.offsetLeft;
    my = lnk.offsetTop;
    */
    mpos = findPosition(lnk);
    mx = mpos[0];
    my = mpos[1];
    //xy = getMousePosition(e);
    //mx = xy[0]; my = xy[1];
   
    d.style.left = (mx+15) + 'px';
    d.style.top = (my+35) + 'px';
    if (window.innerWidth && ((mx+w) > window.innerWidth)) {
        d.style.left = (window.innerWidth - w - 25) + "px";
    }
    if (document.body.scrollWidth && ((mx+w) > document.body.scrollWidth)) {
        d.style.left = (document.body.scrollWidth - w - 25) + "px";
    }
   
    document.getElementsByTagName("body")[0].appendChild(d);
   
    CURRENT_NICE_TITLE = d;
}

function hideNiceTitle(e) {
    if (!document.getElementsByTagName) return;
    if (CURRENT_NICE_TITLE) {
        document.getElementsByTagName("body")[0].removeChild(CURRENT_NICE_TITLE);
        CURRENT_NICE_TITLE = null;
    }
}

// Add an eventListener to browsers that can do it somehow.
// Originally by the amazing Scott Andrew.
function addEvent(obj, evType, fn){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, false);
    return true;
  } else if (obj.attachEvent){
   var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
   return false;
  }
}

function getParent(el, pTagName) {
   if (el == null) return null;
   else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())   // Gecko bug, supposed to be uppercase
      return el;
   else
      return getParent(el.parentNode, pTagName);
}

function getMousePosition(event) {
  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }
  return [x,y];
}

// Determine browser and version.

function Browser() {
// blah, browser detect, but mouse-position stuff doesn't work any other way
  var ua, s, i;

  this.isIE    = false;
  this.isNS    = false;
  this.version = null;

  ua = navigator.userAgent;

  s = "MSIE";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isIE = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  s = "Netscape6/";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  // Treat any other "Gecko" browser as NS 6.1.

  s = "Gecko";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = 6.1;
    return;
  }
}



Was das Script bewirkt könnt ihr bei mir auf der Page sehen. http://markusbalbi.ch/index.php?x=browse einfach mal über einen Link wie z.b. About me fahren.

Was müsste ich nun aus dem Script löschen damit mir der Link der verlinkten Seite nicht angezeigt wird unter dem Alt-Text?


thx für die Hilfe.

Markus
Benutzeravatar
sadcrow
Mitglied
 
Beiträge: 870
Registriert: 08.01.2008, 01:23
Wohnort: Winterthur Schweiz

Re: javascript mutation

Beitragvon Ingo am 23.03.2008, 00:01

Hi.
Ohne das jetzt ausprobiert zu haben, lautet meine Idee
1) in showNiceTitle(e) folgende Passage weglassen (erzeugt den Link im Tooltip):

Code: Alles auswählen
    if (lnk.href) {
        tnd = document.createTextNode(lnk.href);
        pad = document.createElementNS(XHTMLNS,"p");
        pad.className = "destination";
        pad.appendChild(tnd);
        d.appendChild(pad);
    }

und wahrscheinlich darunter noch folgenden Teil ändern (beeinflußt die Breite des Tooltips)

Code: Alles auswählen
    if (lnk.href) {
        h = lnk.href.length;
    } else { h = nicetitle.length; }

und zwar so:

Code: Alles auswählen
h = nicetitle.length;

Wenn ich noch nicht endgültig an einer Schoko-Vergiftung leide, könnte's das sein - wenn :?

Gruß, Ingo :)
Die beste Browserweiche ... sitzt zwischen den Ohren ;o]
Benutzeravatar
Ingo
Moderator
 
Beiträge: 438
Registriert: 01.04.2007, 23:21
Wohnort: Neuss/NRW

Re: javascript mutation

Beitragvon sadcrow am 23.03.2008, 00:07

naja die Schokovergiftung haste noch nicht.....aber..... :lol: :lol: :lol:

jetzt ist nur noch der Link da. Anstatt nur dem AltText. :lol: :lol:
Benutzeravatar
sadcrow
Mitglied
 
Beiträge: 870
Registriert: 08.01.2008, 01:23
Wohnort: Winterthur Schweiz

Re: javascript mutation

Beitragvon Ingo am 23.03.2008, 00:10

Immerhin - ich bin nahe dran am Problem :lol:

Edit: Ich sehe immer noch die if(lnk.href)-Passage im JS. Die muss da weg, weil die den Link-text erzeugt.
Die beste Browserweiche ... sitzt zwischen den Ohren ;o]
Benutzeravatar
Ingo
Moderator
 
Beiträge: 438
Registriert: 01.04.2007, 23:21
Wohnort: Neuss/NRW

Re: javascript mutation

Beitragvon sadcrow am 23.03.2008, 00:59

Spitze! Funzt. Danke vielmals! :wink:
Benutzeravatar
sadcrow
Mitglied
 
Beiträge: 870
Registriert: 08.01.2008, 01:23
Wohnort: Winterthur Schweiz

Re: javascript mutation

Beitragvon Ingo am 23.03.2008, 01:02

Immer wieder gerne - so und jetzt glaubt der Schokohase dran ... :duckweg:
Die beste Browserweiche ... sitzt zwischen den Ohren ;o]
Benutzeravatar
Ingo
Moderator
 
Beiträge: 438
Registriert: 01.04.2007, 23:21
Wohnort: Neuss/NRW

Re: javascript mutation

Beitragvon sadcrow am 23.03.2008, 01:07

boah... bin ich froh, ess ich seit ca. 10Jahren keine Schokolade mehr.... :?
Benutzeravatar
sadcrow
Mitglied
 
Beiträge: 870
Registriert: 08.01.2008, 01:23
Wohnort: Winterthur Schweiz


Zurück zu JavaScript

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast