Avatar billede alex15 Nybegynder
11. december 2008 - 20:24 Der er 9 kommentarer og
1 løsning

onmouseover billede skal komme frem

Hej Eksperter,

Har jeg følgende kode, som skal bruges i et forum, og andre steder på min side til at vise en brugers profil billede når man flytter musen hen over personen.
http://www.dynamicdrive.com/dynamicindex4/imagetooltip.htm

Selve koden fungere fint nok den skal:
http://www.alexanderchristensen.dk/test/mouseover/

Problemer er bare at når jeg skal hente de forskellige billeder gøres dette via et array [xx]:
<a href="#" onmouseover="doTooltip(event,0)" onmouseout="hideTip()">Link 1</a><br>

Hvor ’0’ her viser at den skal hente billede nummer 0, i ens array. Og skal derfor kende rækkefølgen på de billeder jeg ønsker at vise. Det ville også fungere fint nok, hvis jeg kun skulle hente data fra en database. For så ville man kende række følgen og kunne bruge noget while kode til at hente og vise de rigtige billeder.

Men kan det ikke gøres på en anden måde? Så jeg undgår alt det her while halløj?

F.eks. Så jeg bare kunne skrive noget aller:

<a href="#" onmouseover="doTooltip(event, $row[’id’])" onmouseout="hideTip()">Link 1</a>

Så man her inde ikke skal bruge noget array, men bare hente billede direkte:
('billeder/pic-’.$row[’id’].’.jpg','Here is a red balloon on a white background',’#FFFFFF’);

Ved ikke om i forstår hvad jeg mener. Synes det er ret svært at forklare. Håber den er en som gider hjælpe mig med det her. Kan virkelig ikke finde en løsning uden at komme til at bruge 2-3 while koder som hente data fra en database, hvilket ikke virker super godt.
Avatar billede olebole Juniormester
12. december 2008 - 00:57 #1
<ole>

Det er nok mere et PHP-spørgsmål - og du skal vel under alle omstændigheder have én while-løkke, hvis du vil hente noget i databasen. Du kunne f.eks. skrive noget à la:

$aLinks = $aJSArr = array();
$res = [MYSQL-SELECT-QUERY];
while ($row=mysql_fetch_assoc($res)) {
    $aJSArr[] = "['billeder/pic-".$row['id'].".jpg','Here is a red balloon on a white background',"#FFFFFF"]";
    $aLinks[] = "<a href=\"#\" onmouseover=\"doTooltip(event, $row['id'])\" onmouseout=\"hideTip()\">Link 1</a>";
}

$sLinks = implode("", $aLinks);
$sJSArr = "var messages = [".implode(",", $sJSArr)."];";

Så kan du skrive dine links og dit JS-array ud, hvor de skal stå.

/mvh
</bole>
Avatar billede olebole Juniormester
12. december 2008 - 00:58 #2
Ups  =)
    $aJSArr[] = "['billeder/pic-".$row['id'].".jpg','Here is a red balloon on a white background','#FFFFFF']";
Avatar billede alex15 Nybegynder
12. december 2008 - 18:45 #3
Okay, troede det var en Javascript spørgsmål faktisk.

Okay, denne kode skal jeg så skrive ind der hvor der før stod:

messages[0] = new Array('billeder/pic1.jpg','Here is a red balloon on a white background',"#FFFFFF");
messages[1] = new Array('billeder/pic2.jpg','Here is a duck on a light blue background.',"#DDECFF");
messages[2] = new Array('test.gif','Test description','black','white');

eller hvad?

Og så indsætte denne her kode:

<?php
$aLinks = $aJSArr = array();
$query = mysql_query("SELECT * FROM `biler` WHERE `vis` = '2' ORDER BY `navn`");
while($row = mysql_fetch_assoc($query)){
    $aJSArr[] = "['billeder/pic1.jpg','Here is a red balloon on a white background',"#FFFFFF"]";
    $aLinks[] = "<a href=\"#\" onmouseover=\"doTooltip(event, $row['id'])\" onmouseout=\"hideTip()\">Link 1</a>";
}

$sLinks = implode("", $aLinks);
$sJSArr = "var messages = [".implode(",", $sJSArr)."];";

?>

Kan ikke rigtig få det til at fungere nemlig.
Avatar billede olebole Juniormester
13. december 2008 - 14:15 #4
"Kan ikke rigtig få det til at fungere" >> det kan jo betyde mange forskellige ting  =)

print $sJSArr;

- udskriver hele dit JavaScript array.

print $sLinks;

- udskriver dine links. Begge dele, hvis du i toppen af dokumentet har kørt PHP-koden ovenfor
Avatar billede alex15 Nybegynder
13. december 2008 - 14:24 #5
Okay ja, kigger lige på det i morgen. Er lige på vej til noget julefrokost.
Avatar billede alex15 Nybegynder
15. december 2008 - 17:08 #6
Hmm. Nu har jeg skrevet følgende:

index.php (http://www.alexanderchristensen.dk/test/mouseover/index.php)

--- START ---

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Alexander Christensen's Design</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<link rel="stylesheet" type="text/css" href="css.css">

</head>
<body onLoad="StartSlideShow()">

<div class="generelt_boks_1">
    <div class="generelt_boks_2">
        <div class="generelt_boks_3">Mouseover <br /><br /></div>

        <div class="generelt_boks_4">

<?php
session_start();

require "../../ccclub/connect.php";

//require "billede.php";
?>

<?php
$sLinks = implode("", $aLinks);
$sJSArr = "var messages = [".implode(",", $sJSArr)."];";

echo "<br><br>".$sJSArr."<br>";

echo "".$sLinks."";
?>



<br><br>

<?php

$query = mysql_query("SELECT * FROM `biler` WHERE `vis` = '2' ORDER BY `navn`");
while($row = mysql_fetch_assoc($query)){

echo "".$row['id']."<br>";

}

?>

--- SLUT ---

billede.php

--- START ---

<script type="text/javascript">

/***********************************************
* Image w/ description tooltip- By Dynamic Web Coding (www.dyn-web.com)
* Copyright 2002-2007 by Sharon Paine
* Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
***********************************************/

/* IMPORTANT: Put script after tooltip div or
    put tooltip div just before </BODY>. */

var dom = (document.getElementById) ? true : false;
var ns5 = (!document.all && dom || window.opera) ? true: false;
var ie5 = ((navigator.userAgent.indexOf("MSIE")>-1) && dom) ? true : false;
var ie4 = (document.all && !dom) ? true : false;
var nodyn = (!ns5 && !ie4 && !ie5 && !dom) ? true : false;

var origWidth, origHeight;

// 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= 160;
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= "#000080";
var tipBorderWidth= 3;
var tipBorderStyle= "ridge";
var tipPadding= 4;

// 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
<?php
$aLinks = $aJSArr = array();
$query = mysql_query("SELECT * FROM `biler` WHERE `vis` = '2' ORDER BY `navn`");
while($row = mysql_fetch_assoc($query)){
    $aJSArr[] = "['billeder/pic1.jpg','Here is a red balloon on a white background',"#FFFFFF"]";
    $aLinks[] = "<a href=\"#\" onmouseover=\"doTooltip(event, ".$row['id'].")\" onmouseout=\"hideTip()\">".$row['id']."</a>";
}

?>
////////////////////  END OF CUSTOMIZATION AREA  ///////////////////

// preload images that are to appear in tooltip
// from arrays above
if (document.images) {
    var theImgs = new Array();
    for (var i=0; i<messages.length; i++) {
      theImgs[i] = new Image();
        theImgs[i].src = messages[i][0];
  }
}

// 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
var startStr = '<table width="' + tipWidth + '"><tr><td align="center" width="100%"><img src="';
var midStr = '" border="0"></td></tr><tr><td valign="top">';
var endStr = '</td></tr></table>';

////////////////////////////////////////////////////////////
//  initTip    - initialization for tooltip.
//        Global variables for tooltip.
//        Set styles
//        Set up mousemove capture if tipFollowMouse set true.
////////////////////////////////////////////////////////////
var tooltip, tipcss;
function initTip() {
    if (nodyn) return;
    tooltip = (ie4)? document.all['tipDiv']: (ie5||ns5)? document.getElementById('tipDiv'): null;
    tipcss = 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.borderStyle = tipBorderStyle;
    }
    if (tooltip&&tipFollowMouse) {
        document.onmousemove = trackMouse;
    }
}

window.onload = initTip;

/////////////////////////////////////////////////
//  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,num) {
    if (!tooltip) return;
    if (t1) clearTimeout(t1);    if (t2) clearTimeout(t2);
    tipOn = true;
    // set colors if included in messages array
    if (messages[num][2])    var curBgColor = messages[num][2];
    else curBgColor = tipBgColor;
    if (messages[num][3])    var curFontColor = messages[num][3];
    else curFontColor = tipFontColor;
    if (ie4||ie5||ns5) {
        var tip = startStr + messages[num][0] + midStr + '<span style="font-family:' + tipFontFamily + '; font-size:' + tipFontSize + '; color:' + curFontColor + ';">' + messages[num][1] + '</span>' + endStr;
        tipcss.backgroundColor = curBgColor;
        tooltip.innerHTML = tip;
    }
    if (!tipFollowMouse) positionTip(evt);
    else t1=setTimeout("tipcss.visibility='visible'",100);
}

var mouseX, mouseY;
function trackMouse(evt) {
    standardbody=(document.compatMode=="CSS1Compat")? document.documentElement : document.body //create reference to common "body" across doctypes
    mouseX = (ns5)? evt.pageX: window.event.clientX + standardbody.scrollLeft;
    mouseY = (ns5)? evt.pageY: window.event.clientY + standardbody.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) {
        standardbody=(document.compatMode=="CSS1Compat")? document.documentElement : document.body
        mouseX = (ns5)? evt.pageX: window.event.clientX + standardbody.scrollLeft;
        mouseY = (ns5)? evt.pageY: window.event.clientY + standardbody.scrollTop;
    }
    // tooltip width and height
    var tpWd = (ie4||ie5)? tooltip.clientWidth: tooltip.offsetWidth;
    var tpHt = (ie4||ie5)? tooltip.clientHeight: tooltip.offsetHeight;
    // document area in view (subtract scrollbar width for ns)
    var winWd = (ns5)? window.innerWidth-20+window.pageXOffset: standardbody.clientWidth+standardbody.scrollLeft;
    var winHt = (ns5)? window.innerHeight-20+window.pageYOffset: standardbody.clientHeight+standardbody.scrollTop;
    // check mouse position against tip and window dimensions
    // and position the tooltip
    if ((mouseX+offX+tpWd)>winWd)
        tipcss.left = mouseX-(tpWd+offX)+"px";
    else tipcss.left = mouseX+offX+"px";
    if ((mouseY+offY+tpHt)>winHt)
        tipcss.top = winHt-(tpHt+offY)+"px";
    else tipcss.top = mouseY+offY+"px";
    if (!tipFollowMouse) t1=setTimeout("tipcss.visibility='visible'",100);
}

function hideTip() {
    if (!tooltip) return;
    t2=setTimeout("tipcss.visibility='hidden'",100);
    tipOn = false;
}

document.write('<div id="tipDiv" style="position:absolute; visibility:hidden; z-index:100"></div>')

</script>

--- SLUT ---

Hvad er det som jeg gør forkert?

Ps. Tror måske jeg har misforstået hvad det er du mener med det ;)
Avatar billede alex15 Nybegynder
15. december 2008 - 17:09 #7
Det vigtige:

Index.php

--- Start

<?php
$sLinks = implode("", $aLinks);
$sJSArr = "var messages = [".implode(",", $sJSArr)."];";

echo "<br><br>".$sJSArr."<br>";

echo "".$sLinks."";
?>

<br><br>

<?php

$query = mysql_query("SELECT * FROM `biler` WHERE `vis` = '2' ORDER BY `navn`");
while($row = mysql_fetch_assoc($query)){

echo "".$row['id']."<br>";

}

?>

--- Slut

billede.php

--- start

<?php
$aLinks = $aJSArr = array();
$query = mysql_query("SELECT * FROM `biler` WHERE `vis` = '2' ORDER BY `navn`");
while($row = mysql_fetch_assoc($query)){
    $aJSArr[] = "['billeder/pic1.jpg','Here is a red balloon on a white background',"#FFFFFF"]";
    $aLinks[] = "<a href=\"#\" onmouseover=\"doTooltip(event, ".$row['id'].")\" onmouseout=\"hideTip()\">".$row['id']."</a>";
}

?>

--- slut
Avatar billede alex15 Nybegynder
15. december 2008 - 18:18 #8
Fik lige rettet "" om til '', dog gjorde dette ingen forskel.
Avatar billede alex15 Nybegynder
15. december 2008 - 23:46 #9
Der må da være en nemmere måde at gøre dette på. Fx på denne her måde:

<a href="#" onmouseover="doTooltip(event,0,*x*)" onmouseout="hideTip()">Link 1</a><br>

*x* = fx $row['id'] En variabel som sendes hen til billede.php filen. Og som f.eks. kunne være brugerens id nummer. Som billeder også bliver glemt under. Så der inde i billede.php bare henter billeder/profil/pic_".$row['id'].".jpg - Hvis du forstår hvad jeg mener?

Så undgår man at skulle lave sådan en:

$query = mysql_query("SELECT * FROM `biler` WHERE `vis` = '2' ORDER BY `navn`");
while($row = mysql_fetch_assoc($query)){
}

Inde i selve billede.php filen? Eller er det ikke muligt at gøre det på denne måde?
Avatar billede alex15 Nybegynder
26. december 2009 - 17:49 #10
Lukket.
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