webForumDet fria alternativet

Snyggt designad popup-box

12 svar · 2 114 visningar · startad av bobrov

bobrovMedlem sedan maj 200833 inlägg
#1

Hej jag skulle vilja göra följande:

Om man klickar på en länk/knapp...whatever så vill jag att en snygg popup-box ska uppenbara sig i mitten av sidan =).

Alltså en box där jag kan presentera en bild/bildspel...kanske text info mm. Jag vill att det ska vara ett fönster/box men alltså ingen jäkla alertbox med windowsgränsnitt. Jag vill ha en med rundade hörn mm som jag kan rita själv med egen stäng-funktion osv. Gärna att resten av sidan tonar ner så boxen hamnar mer i fokus.

Det är inte tvunget att man ska kunna dra och flytta boxen.

Är javascript möjligt? Flash? Kan knappt något om dessa områden utan kodar mer i asp.net och inte så hemma på design.

Hjälp =)!

FiaMedlem sedan apr. 20042 994 inlägg
#2

Den här sidan visar hur man gör en simpel popup med CSS och javascript:
http://www.webbdesign.info/client_side_sprak/css/popup-reklam.html.

Löser inte problemet med runda hörn och nedtonad bakomliggande sida, men är en bra början åtminstone. :)

voigtann1Medlem sedan juni 20019 519 inlägg
#3

Är det inte bara http://www.lokeshdhakar.com/projects/lightbox2/ du är ute efter?

bobrovMedlem sedan maj 200833 inlägg
#4

jo lightbox är ju en bra bit på vägen. men jag vill även kunna vara lite mer fri med egen design. Tack för en bra början...jag ska tror det här räcker ganska långt =)

Om nån annan har nåt på lut, skriv gärna, men jag tror som sagt jag klarar mig långt på de två svaren jag redan fått.

bobrovMedlem sedan maj 200833 inlägg
#5

Jag hittade felet... :P

bobrovMedlem sedan maj 200833 inlägg
#6

Okej nya problem. Vad är fel i koden? Varför kör han bara changeOpacity i två steg? Alltså varför kör den bara startsteg och slutsteg och inte mellansteg?

Hur fungerar setTimeout? använder jag den fel?

Kod:

<!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>
<title>Untitled Document</title>
<script type="text/javascript">
window.onload = function()
{
var link = document.createElement("p");
link.style.color = "white";
link.onclick = closeBox;
link.style.cursor = "pointer";

var linktext = document.createTextNode("CloseBox(x)");
link.appendChild(linktext);

var popup = document.createElement("div");
popup.id = "popup";
popup.style.display = "none";
popup.appendChild(link);
document.body.appendChild(popup);

var overlay = document.createElement("div");
overlay.id = "overlay";
overlay.style.display = "none";
document.body.appendChild(overlay);

}

function fade(elementId, opacityStart, opacityEnd, millisec)
{
if (opacityStart < opacityEnd)
{
changeOpacity(elementId, opacityStart);
document.getElementById(elementId).style.display = "";

	for( i = opacityStart; i \<= opacityEnd; i++)
	{
		setTimeout("changeOpacity(\\"" + elementId + "\\"," + i + ")", millisec);
		//setTimeout("none()", millisec);
		//changeOpacity(elementId, i);
	}
}

}

function none(){}

function changeOpacity(id, opacity)
{
var object = document.getElementById(id);
object.style.opacity = (opacity / 100);
object.style.MozOpacity = (opacity / 100);
}

function closeBox()
{
document.getElementById("popup").style.display="none";
document.getElementById("overlay").style.display = "none";
}

function openBox()
{
fade("overlay", 20, 80, 1000);
document.getElementById("popup").style.display="";
}
</script>
<style type="text/css">
div#background
{
color:gray;
font-size:100px;
position:absolute;
left:10%;
top:5%;
}
div#popup
{
background-color:black;
color:white;
width:300px;
height:200px;
position:absolute;
left:20%;
top:10%;
z-index:5;
}
div#popup a
{
color:white;
text-align:right;
}
div#overlay
{
position:absolute;
left:0px;
top:0px;
width:100%;
height:500px;
z-index:3;
background-color:black;
}
</style>
</head>

<body>
<a href="javascript:openBox()">Show box</a>
<div id="background">
<span>BACKGROUND</span>
</div>
</body>

</html>

Sidan ligger uppe på http://www.ilcalcio.se/webforumtest/test3.html

bobrovMedlem sedan maj 200833 inlägg
#7

kom igen, hjälp mig med denna.

voigtann1Medlem sedan juni 20019 519 inlägg
#8

setTimeout() körs varje gång den den har "väntat" i x milisekunder som du sätter i din variabel 'millisec', så den körs fler än två gånger i koden ovan.

bobrovMedlem sedan maj 200833 inlägg
#9

körs den fler än två gånger? har du kikat på hur det ser ut i browsern? nåt har jag ju missat..

voigtann1Medlem sedan juni 20019 519 inlägg
#10
function fade(elementId, opacityStart, opacityEnd, millisec)
{
	if (opacityStart < opacityEnd)
	{
		changeOpacity((opacityStart/100),elementId);
		document.getElementById(elementId).style.display = "";
		testObj = document.getElementById(elementId);

		for (var i=(opacityStart/100);i<(opacityEnd/10);i++)
			setTimeout('changeOpacity('+i+',"' + elementId +'")',millisec*i);
	}
}

function changeOpacity(value,id)
{
	var testObj = document.getElementById(id);
	testObj.style.opacity = value/10;
	testObj.style.filter = 'alpha(opacity=' + value*10 + ')';
}

Fungera i IE och FF (ersätt dina två funktioner med dessa).

bobrovMedlem sedan maj 200833 inlägg
#11

Nu har jag börjat få ordning på det här, dock några oklarheter kvar.
Här är min kod:

<!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>
<title>Untitled Document</title>
<script type="text/javascript">
window.onload = function()
{
	var link = document.createElement("p");
	link.style.color = "white";
	link.onclick = closeBox;
	link.style.cursor = "pointer";
	
	var linktext = document.createTextNode("CloseBox(x)");
	link.appendChild(linktext);
	
	var popup = document.createElement("div");
	popup.id = "popup";
	popup.style.display = "none";
	popup.appendChild(link);
	document.body.appendChild(popup);

	var overlay = document.createElement("div");
	overlay.id = "overlay";
	overlay.style.display = "none";
	overlay.style.height = "100%";
	overlay.style.width = "100%";
	document.body.appendChild(overlay);
}

function fade(elementId, opacityStart, opacityEnd, millisec)
{
	if (opacityStart < opacityEnd)
	{
		changeOpacity(elementId, opacityStart);
		document.getElementById(elementId).style.display = "";
		for(var i = opacityStart; i <= opacityEnd; i++)
		{
			setTimeout("changeOpacity(\"" + elementId + "\"," + i + ")", millisec * i);
		}
	}
	
	if (opacityStart > opacityEnd)
	{
		changeOpacity(elementId, opacityStart);
		document.getElementById(elementId).style.display = "";
		var time = 0;
		for(var i = opacityStart; i >= opacityEnd; i--)
		{
			setTimeout("changeOpacity(\"" + elementId + "\"," + i + ")", millisec * time);
			time++;
		}
	}
}

function changeOpacity(id, opacity)
{
	var object = document.getElementById(id);
	object.style.opacity = (opacity / 100);
	object.style.MozOpacity = (opacity / 100);
	object.style.filter = 'alpha(opacity="' + opacity + '")';
}
//function fade(elementId, opacityStart, opacityEnd, millisec)
//{
//	if (opacityStart < opacityEnd)
//	{
//		changeOpacity((opacityStart/100),elementId);
//		document.getElementById(elementId).style.display = "";
//		//testObj = document.getElementById(elementId);
//
//		for (var i=(opacityStart/100);i<(opacityEnd/10);i++)
//			setTimeout('changeOpacity('+i+',"' + elementId +'")',millisec*i);
//	}
//}
//
//
//function changeOpacity(value,id)
//{
//	var testObj = document.getElementById(id);
//	testObj.style.opacity = value/10;
//	testObj.style.filter = 'alpha(opacity=' + value*10 + ')';
//}

function closeBox()
{
	document.getElementById("popup").style.display="none";
	document.getElementById("overlay").style.display = "none";
	var opEnd = document.getElementById("overlay").style.opacity;
	opEnd = opEnd * 100;
	fade("overlay", opEnd, 0, 35);
}

function openBox()
{
	fade("overlay", 0, 70, 35);	
	document.getElementById("popup").style.display="";
}
</script>
<style type="text/css">
div#background
{
	color:gray;
	font-size:100px;
	position:absolute;
	left:10%;
	top:5%;
}
div#popup
{
	background-color:black;
	color:white;
	width:300px;
	height:200px;
	position:absolute;
	left:20%;
	top:10%;
	z-index:5;
}
div#popup a
{
	color:white;
	text-align:right;
}
div#overlay
{
	position:absolute;
	left:0px;
	top:0px;
	z-index:3;
	background-color:black;
}
</style>
</head>

<body>
<a href="javascript:openBox()">Show box</a>
<div id="background">
<span>BACKGROUND</span>
</div>
</body>

</html>

Jag punktar.

1. Explorer använder ju som bekant något som kallas filter istället för opacity. Varför klarar den köra closeBox()?

document.getElementById("popup").style.display="none";
document.getElementById("overlay").style.display = "none"; (onödig...)
var opEnd = document.getElementById("overlay").style.opacity;
opEnd = opEnd \* 100;
fade("overlay", opEnd, 0, 35);

Dels hämtar jag bara style.opacity. Dels multiplicerar jag med hundra för att få det rätt i Mozilla som anger från 0-1 istället för filter som går från 0-100.
Jag vill förstå.

2. Den viktigaste punkten. Varför kan jag bara köra openBox()-scriptet en gång? När jag kört openBox() och sedan följdaktligen closeBox() så måste jag uppdatera sidan innan jag kan köra openBox() igen. Jag verkar ha missat något väsentligt i javascript.

3. Exakt hur fungerar setTimeout? Jag har ju fått koden att fungera men jag förstår inte det här med att den måste bero på en räknare om man nu vill att den ska utföra upprepade saker. Jag antar att setInterval fungerar mer som jag tänker att setTimeout skulle fungera. Men exakt vad är det setTimeout gör varje gång i forloopen?

Kan någon svara på någon av punkterna är jag glad. Speciellt tvåan för den fungerar ju inte.

sidan ligger ute på: http://www.ilcalcio.se/webforumtest/test3.html

bobrovMedlem sedan maj 200833 inlägg
#12

voigtann1? please... ;)

voigtann1Medlem sedan juni 20019 519 inlägg
#13

1. Vet jag inte men att du skriver att display none är onödigt är inte alls sant, du måste köra den för det är just det som är problemet på din andra fråga, overlayen är inte satt till none, den är fortfarande ovanför dina andra element (ladda ner firebug så ser du detta).

3. http://www.w3schools.com/htmldom/met_win_settimeout.asp

141 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)