Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wylaczenie funkcji
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
acidm
witam ,mam problem ze skryptem zmiany stylu css, napisalem funkcje zmieniajaca plynnie dana wartosc stylu do podanego parametru,zainicjowanie nastepuje przez zdarzenie onmouseover a onmouseout ma za zadanie wyzerowac timer wczesniejszy i plynnie przywrocic parametr stylu,i tu wlasnie jest problem ..prosze o pomoc...(z js wlasnie zaczynam)

<!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=utf-8" />
<title>Dokument bez tytułu</title>

<script type="text/javascript">
function start(obj,wartosc,styll){

if (obj.currentStyle){
var s=obj.currentStyle[styll];
var od=parseInt(s);
}
else {
var w=window.getComputedStyle(obj, null)[styll];
var od=parseFloat(w);
}

clearInterval();
setInterval(run,15);
function run(){
if(od<wartosc){
++od;
}
else if (od>wartosc){
--od;
}
else {
clearInterval();
}
obj.style[styll]=od+'px';
}

}

</script>

<style type="text/css">
div {
background-color: #069;
height: 40px;
width: 40px;
float:left;
margin:5px;
}
</style>
</head>

<body>
<div onmouseover="start(this,'200','height');" onmouseout="start(this,'40','height');"></div>
<div onmouseover="start(this,'200','height');" onmouseout="start(this,'40','height');"></div>
<div onmouseover="start(this,'200','height');" onmouseout="start(this,'40','height');"></div>
</body>
</html>
krowal
clearInterval(id) przyjmuje jako parametr id włączonego wcześniej intervala (tak może być ich kilka działających naraz)
[JAVASCRIPT] pobierz, plaintext
  1. var intervalId = setInterval(function(){}, 1000);
  2. clearInterval(intervalId); //zatrzyma interval o id = intervalId
[JAVASCRIPT] pobierz, plaintext
acidm
Kod
clearInterval(w);
var w=setInterval(run,15);
function run(){
if(od<wartosc){  
++od;
}
else if (od>wartosc){
--od;  
}
else {
clearInterval(w);
}

po poprawkach dalej nie dziala


krowal
Przecież 'w' to normalna zmienna, jak chcesz się do niej odwołać przed jej zainicjowaniem ? Najpierw robisz clearInterval(w) na zmiennej którą tworzysz dopiero w kolejnej linijce -> gdzie tu sens ? smile.gif Tak myślałem, że przekleisz kod i nawet nie pomyślisz wink.gif W twoim przypadku musiałbyś tą zmienną 'w' inicjować na początku kodu jako zmienną globalną. Da się to oczywiście zrobić bez zmiennej globalnej ale musiałbyś przepisać cały kod wink.gif
acidm
Zgadza sie jednak samo zainicjonowanie zmiennej nie wystarczy ,chce wylaczyc wczesniejsze odpalenie timera w chwili wlaczenia powtornego na tym samym obiekcie
krowal
Przy inicjacji ustawiaj w = null;
Przy pierwszym pierwszym wywołaniu clearInterval sprawdzaj czy w == null, jeśli nie to czyść, jeśli tak to nie rób nic.
Trzeba trochę pomyśleć.
acidm
poradzilem sobie,ale uwagi (propozycje zmian w celu zwiekszenia poprawności i wydajności) mile widziane
CODE
<!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=utf-8" />
<title>Dokument bez tytułu</title>

<script type="text/javascript">
function animuj(obiekt,docelowa,styll,poczatkowa){
if (typeof obiekt.currentStyle!=='undefined'){
var obecna=parseFloat(obiekt.currentStyle[styll]);}
else {
var obecna=parseFloat(window.getComputedStyle(obiekt, null)[styll]);}

function up(){
var timer=setInterval(function (){
if (obecna<docelowa){obecna+=2}
else if (obecna>docelowa){obecna-=2}
else {clearInterval(timer);}
obiekt.style[styll]=obecna+'px';
},15);
obiekt.onmouseout = function(){
clearInterval(timer);
docelowa=poczatkowa;
up();}
}
up();
}


</script>

<style type="text/css">
div {
background-color: #069;
height: 40px;
width: 40px;
float:left;
margin:5px;


}
</style>
</head>

<body>
<div onmouseover="animuj(this,'200','height','40');" ></div>
<div onmouseover="animuj(this,'200','height','40');" ></div>


</body>
</html>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.