Avatar billede plaf Nybegynder
10. september 2011 - 15:10 Der er 8 kommentarer og
1 løsning

popup css div position - tilpasning af script

Hej

Jeg vil gerne åbne min div med position i forhold til det link, der åbner den (i stedet for midt i vinduet).
Jeg har tilpasset et par script. Det eneste jeg mangler er positionen på den åbnede div.

Jeg har følgende 2 filer:¨
HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Test</title>
<script type="text/javascript" src="csspopup.js"></script>
<style type="text/css">
<!--
#blanket {
/*  background-color:#111;
  opacity: 0.65; ====use this to fade background*/
  position:absolute;
  z-index: 9001; /*ooveeerrrr nine thoussaaaannnd*/
  top:0px;
  left:0px;
  width:100%;
}
#popUpDiv {
    position:absolute;
    background-color:#cccccc;
    width:150px;
    height:160px;
    z-index: 9002; /*ooveeerrrr nine thoussaaaannnd*/
    -moz-box-shadow: 2px 2px 2px #dedede; /* Firefox */
    -webkit-box-shadow: 2px 2px 2px #dedede; /* Safari and Chrome */
    filter:progid:DXImageTransform.Microsoft.Shadow(color='#dedede',direction='120',strength='2')
}
-->
</style>
</head>
<body>
    <br /><br /><br /><br /><br />
    <div id="blanket" style="display:none;"></div>
    <div id="popUpDiv" style="display:none;">
        <a href="#" onclick="document.forms['test'].test2.value='Hej';popup('popUpDiv');return false;">Skriv Hej i feltet</a>
    </div>
    <form name="test" action="test.php" method="post">
        <input type="text" name="test2">
    </form>
   
    <a href="#" onclick="popup('popUpDiv')">Click Here To Open The Pop Up</a>
</body>
</html>
===================
java script:


function toggle(div_id) {
    var el = document.getElementById(div_id);
    if ( el.style.display == 'none' ) {    el.style.display = 'block';}
    else {el.style.display = 'none';}
}
function blanket_size(popUpDivVar) {
    if (typeof window.innerWidth != 'undefined') {
        viewportheight = window.innerHeight;
    } else {
        viewportheight = document.documentElement.clientHeight;
    }
    if ((viewportheight > document.body.parentNode.scrollHeight) && (viewportheight > document.body.parentNode.clientHeight)) {
        blanket_height = viewportheight;
    } else {
        if (document.body.parentNode.clientHeight > document.body.parentNode.scrollHeight) {
            blanket_height = document.body.parentNode.clientHeight;
        } else {
            blanket_height = document.body.parentNode.scrollHeight;
        }
    }
    var blanket = document.getElementById('blanket');
    blanket.style.height = blanket_height + 'px';
    var popUpDiv = document.getElementById(popUpDivVar);
    popUpDiv_height=blanket_height/2-150;//150 is half popup's height
    popUpDiv.style.top = popUpDiv_height + 'px';
}
function window_pos(popUpDivVar) {
    if (typeof window.innerWidth != 'undefined') {
        viewportwidth = window.innerHeight;
    } else {
        viewportwidth = document.documentElement.clientHeight;
    }
    if ((viewportwidth > document.body.parentNode.scrollWidth) && (viewportwidth > document.body.parentNode.clientWidth)) {
        window_width = viewportwidth;
    } else {
        if (document.body.parentNode.clientWidth > document.body.parentNode.scrollWidth) {
            window_width = document.body.parentNode.clientWidth;
        } else {
            window_width = document.body.parentNode.scrollWidth;
        }
    }
    var popUpDiv = document.getElementById(popUpDivVar);
    window_width=window_width/2-150;//150 is half popup's width
    popUpDiv.style.left = window_width + 'px';
}
function popup(windowname) {
    blanket_size(windowname);
    window_pos(windowname);
    toggle('blanket');
    toggle(windowname);       
}



Nogen, der kan hjælpe?
/Plaf
Avatar billede majbom Novice
10. september 2011 - 18:07 #1
du sætter da allerede positionen på den åbnede div?
Avatar billede plaf Nybegynder
10. september 2011 - 19:21 #2
Jo, men nu er det bare i midten af vinduet. Jeg vil have positionen i forhold til det link, der åbnede den... :-)
Avatar billede majbom Novice
10. september 2011 - 19:50 #3
det kan du finde med denne stump kode:

function findPos(obj) {
                var curleft = curtop = 0;
               
                if (obj.offsetParent)
                {
                    do
                    {
                        curleft += obj.offsetLeft;
                        curtop += obj.offsetTop;
                    }
                    while (obj = obj.offsetParent);
                return [curleft,curtop];
                }
            }
Avatar billede plaf Nybegynder
10. september 2011 - 23:34 #4
Takker :-)
Avatar billede plaf Nybegynder
10. september 2011 - 23:35 #5
Vil du skrive et svar?
Avatar billede majbom Novice
11. september 2011 - 00:01 #6
kommer her :)

og selv tak...
Avatar billede majbom Novice
11. september 2011 - 16:13 #7
tfp :)
Avatar billede olebole Juniormester
11. september 2011 - 16:33 #8
<ole>

- og det kan også løses på andre måder. F.eks. kan det gøres med CSS alene:


<style type="text/css">
.popupLink {
    position: relative;
    display: inline-block;
    overflow: hidden;
}
.popupLink:hover {
    overflow: visible;
}
.popupLink span {
    position: absolute;
    width: 180px;
    height: 40px;
    left: 40px;
    top: 20px;
    padding: 8px;
    background: yellow;
    color: red;
    border: 1px solid red;
    cursor: default;
}
</style>

<div>
    <a href="#" class="popupLink">Link til et eller andet
        <span onclick="return false">En eller anden tekst om det link, du har musen over</span></a>
</div>


I stedet for at bruge pseudoklassen :hover, kunne du også lave et lille JavaScript, der sætter linkets overflow til visible

/mvh
</bole>
Avatar billede olebole Juniormester
11. september 2011 - 16:48 #9
PS: Div'et rundt om linket er kun til for at gøre koden valid (inline elementer må ikke ligge 'løst' i body'en).

onclick handleren på span'et er kun implementeret, fordi span'et ligger under linket - og derfor også vil trigge linket ved klik. Det undgås ved denne kode
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