Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: span-resize smoothiksi

Silvester [21.06.2008 12:24:36]

#

Terve.

Olen yrittänyt saada aikaan smoothia tekstin piilotus/näytä efektiä.
Eli käytännössä homman pitäisi näyttää samanlaiselta kuin osoitteesta http://meteli.net/festarit löytyvä. (se tulevat festarit -kohta)


Ohjelmointiputkan esimerkkeihin vahvasti pohjautuva oma yritykseni näyttää siis seuraavalta. Ainut vika, että se ei ole smoothi, vaan div/span vaan töksähtää paikalle.

<script language='JavaScript'>
function swap_content(span) {
displayType=(document.getElementById(span).style.display=='none') ? 'block':'none';
document.getElementById(span).style.display=displayType;
setTimeout("swap_content()",400);
}


</script>
<a href="#" onmouseover="swap_content('1'); return false;" onmouseout="swap_content('1'); return false;">Klik</a><br>
<span id="1" style="display: none"  onmouseover="swap_content('1'); return false;" onmouseout="swap_content('1'); return false;">jees
poks</span>
<a href="#" onclick="swap_content('2'); return false;">Klik2</a>
<span id="2" style="display: none"><b>jees</b><u>poks</u></span>

Eli ton varmaan sais jotenkin setTimerilla hidastettua? Vai?

peg [21.06.2008 14:11:05]

#

me sinne meteli.net ja katso lähdekoodista.

Silvester [21.06.2008 17:51:55]

#

No olen tiiraillut sitä lähdekoodia ja yrittänyt ottaa mallia, mutta tuloksetta. Vika tietenkin tekijässä. Enhän mä apua kysyisi, jos sille ei olisi tarvetta. Eli jos osaisin plagioida suoraan tuolta meteli.netistä, olisin sen jo tehnyt.

Eniveis, yritin soveltaa tota meteli.netin koodia, mutta empä saanut skulaamaan. :/

Baglair [21.06.2008 19:23:01]

#

HTML

<html>
<head>
<style type="text/css">
div	{
	border: thin solid black;
	width: 200px;
	height: 100px;
	overflow: hidden;
	padding: 0;	/* Tarkea clientHeightin takia */
}
p	{
	margin: 1em;
}
</style>
<script src="javascript.js"></script>
</head>
<body>
<div id="div1">
<p>
dasdasd asdl ahsuflsdgfdh h dgfdh gfdh
 gfdh trdihtopjoptrjd hnjgfdkh gfdh
t dhikgfdhmagkfdhoptdjgfd h
</p>
</div>
<input type="button" onclick="smoothExpand(getElementById('div1'), 100, 200)" value="Suurenna">
</input>
<input type="button" onclick="smoothCollapse(getElementById('div1'), 100, 200)" value="Pienenn&auml;">
</input>
</body>
</html>

javascript.js

var updaterate = 300;

function resizeHeight(obj, x)	{
	obj.style.height = x;
}


/*
 * obj - Kohde
 * p - venytys pikseleina
 * time - venytykseen kuluva aika (millisekunteina)
 */

function smoothExpand(obj, p, time)	{
	var obj_s = obj.style;
	var h = obj.clientHeight;

	if(!obj_s.height)
		obj_s.height = h;

	var jaksoja = updaterate*time/1000;
	var dt = time / jaksoja;
	for(i = 0; i < jaksoja; i++)	{
		s = (p*dt*i*dt*i)/(time*time)
		setTimeout(resizeHeight, dt*i, obj, h+s);
	}
}
function smoothCollapse(obj, p, time)	{
	var obj_s = obj.style;
	var h = obj.clientHeight;

	if(!obj_s.height)
		obj_s.height = h;

	var jaksoja = updaterate*time/1000;
	var dt = time / jaksoja;
	for(i = 0; i < jaksoja; i++)	{
		s = (p*dt*(i)*dt*(i))/(time*time)
		setTimeout(resizeHeight, dt*i, obj, h-s);
	}
}

Silvester [21.06.2008 22:58:50]

#

Kiitos Baglair.

Toi skulaa muuten, mutta tulee pientä bugia, jos vaikkapa laitan html:n että

<div id="div2" onmouseover="smoothExpand(getElementById('div2'), 100, 200)" onmouseout="smoothCollapse(getElementById('div2'), 100, 200)">
<p>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam vel tellus. Morbi condimentum fringilla lorem. Cras vel enim. Nulla aliquet sem vel est. Cras lectus magna, mattis quis, euismod eget, condimentum quis, purus. Sed sagittis tellus non libero. In nisl augue, faucibus a, vestibulum nec, congue vitae, pede. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Pellentesque feugiat est at ligula. Fusce vulputate scelerisque quam.
</p>
</div>

Ei nähtävästi tahdo tehdä yhteistytä onmouseoverin kanssa. Olisiko ehdotuksia?

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta