20-02-2011, 17:00
(Ten post był ostatnio modyfikowany: 20-02-2011, 17:04 przez Kartofelek.)
Wczoraj natknąłem się na ciekawy problem. Może jakaś literówka, ale nic nie wymyśliłem.
Na mojej stronie http://doman.art.pl na górze strony latają sobie chmurki. Skrypt do nich wygląda tak:
.
Interesujące mnie linijki oznaczyłem gwiazdkami.
We wcześniejszej wersji chmurka miała wylecieć poza ekran, czyli jej
left miało być < -400 (2 linijka). Niestety pierwsza z oznaczonych linijek w Chromie nie działała, i chmurka maksymalnie uzyskiwała 0, stąd w 2 oznaczonej linijce musiałem zmienić warunek z -400 na 0.
Teraz niby działa, ale może ktoś wie, czemu
w Chromie poniżej 0 nie działa?
Ps. offset() też nie przynosił rezultatu.
Pomyślałem sobie, że mógł bym left trzymać w tablicy jak resztę zmiennych. Drugie rozwiązanie to nie przesuwanie obiektu, a rozciągnięcie go na cały obszar i animacja tylko backgrounda. Może wtedy będzie lepsza wydajność?
O wiele lepiej by się pisało posty, gdyby to forum korzystało z syntaxhighlightu ( http://alexgorbatchev.com/SyntaxHighlighter/ )
Na mojej stronie http://doman.art.pl na górze strony latają sobie chmurki. Skrypt do nich wygląda tak:
Kod:
var ile = 10;
var $chmurki = [];
var maxTop = 313-259;
var maxLeft = $(window).width()-400;
var minSpeed = 0.5;
var maxSpeed = 0.8; //minSpeed + maxSpeed
for (i=0; i<ile; i++) {
$chmurki[i] = $('<span class="chmurka'+((Math.random(1)>0.5)?'2':'1')+'"></span>');
if (i < ile/2) {
$chmurki[i].css('left',Math.random()*(maxLeft/2));
} else {
$chmurki[i].css('left',Math.random()*(maxLeft/2) + (maxLeft/2));
}
$chmurki[i].css('top',Math.random()*maxTop);
$chmurki[i].css({'opacity':0.5 + Math.random(0.5)});
$chmurki[i].speed = minSpeed + Math.random()*maxSpeed;
$chmurki[i].done = false;
$('.page_top').prepend($chmurki[i]);
$chmurki[i].show();
}
jQuery.animuj = function() {
for (i=0; i<ile; i++) {
var $ob = $chmurki[i];
$ob.css('left', $ob.position().left - $ob.speed); //* 1 *********
if ($ob.position().left <= 0 && !$ob.done) { //* 2 *********
$ob.done = true;
$ob.animate(
{left:-10,opacity:0},
500,
function() {
$(this).done = false;
$(this).css({
left : maxLeft,
top : Math.random()*maxTop
});
$(this).speed = minSpeed + Math.random()*maxSpeed;
$(this).removeClass().addClass('chmurka'+((Math.random(1)>0.5)?'2':'1'))
$(this).animate({
opacity: 0.5 + Math.random(0.5)
},500);
}
);
}
}
setTimeout(function() {
jQuery.animuj();
}, 33);
}
if (ile>0) {
jQuery.animuj();
}
Interesujące mnie linijki oznaczyłem gwiazdkami.
We wcześniejszej wersji chmurka miała wylecieć poza ekran, czyli jej
left miało być < -400 (2 linijka). Niestety pierwsza z oznaczonych linijek w Chromie nie działała, i chmurka maksymalnie uzyskiwała 0, stąd w 2 oznaczonej linijce musiałem zmienić warunek z -400 na 0.
Teraz niby działa, ale może ktoś wie, czemu
Kod:
$ob.css('left', $ob.position().left - $ob.speed);
w Chromie poniżej 0 nie działa?
Ps. offset() też nie przynosił rezultatu.
Pomyślałem sobie, że mógł bym left trzymać w tablicy jak resztę zmiennych. Drugie rozwiązanie to nie przesuwanie obiektu, a rozciągnięcie go na cały obszar i animacja tylko backgrounda. Może wtedy będzie lepsza wydajność?
O wiele lepiej by się pisało posty, gdyby to forum korzystało z syntaxhighlightu ( http://alexgorbatchev.com/SyntaxHighlighter/ )
