Задаем движение
Доброго всем времени суток! Я тут новенький (как на форуме, так и в JavaScript(только начал)), так что просу строго не судить и сразу же приношу свои извинения, если что-то не в том разделе пишу или т.п.
Собственно в чём проблема: Необходимо привести имитацию солнечного дня, а именно: есть 7 положений солнца: 1-е - 7 часов - 90 градусов; 2-е - 9 часов - 120 градусов; 3-е - 11 часов - 150 градусов; 4-е - 13 часов - 180 градусов; 5-е - 15 часов - 210 градусов; 6-е - 17 часов - 240 градусов; 7-е - 19 часов - 270 градусов; Вопрос собственно в том, как именно это сделать? Мои соображения: Я так понимаю необходимо математически описать круг и каким-то образом передать координаты обету?! Описать получается только синус(косинус), а при любых других вариантах объект движется только вперед и назад. Не понимаю как это сделать! Вот что есть: ------------------------------------------------------------------ В index.html:
<html>
<head>
<link rel="stylesheet" type="text/css" href="./style_sytki.css" />
<script type="text/javascript" src="./sutki.js"></script>
</head>
<body>
<img src="./img/sun.png" alt="Солнце" id="sun" />
<script type="text/javascript">
var d = document;
var l_sun, r_sun = setInterval(right_sun, 30);
var ch = setInterval(sun_change, 200);
var direct;
var grad = 0, pi = Math.PI, rad = pi/180;
var sin = setInterval(sinus, 30);
</script>
</body>
</html>
---------------------------------------------------------------- В style_sytki.css
html, body {
height: 100%;
}
body {
margin: 0;
background-image: url(./img/bg.jpg);
}
img {
display: block;
position: absolute;
}
#sun {
margin-top: 200px;
------------------------------------------------------------------- В sutki.js:
function sun_change() {
var pict = d.getElementById('sun');
if (direct == 'right') {
pict.src = './img/sun.png';
} else if (direct == 'left') {
pict.src = './img/sun1.png';
}
}
right_sun = function() {
var obj = d.getElementById('sun');
if (obj.offsetLeft < (d.body.offsetWidth - obj.offsetWidth)){
obj.style.left = obj.offsetLeft + 1 + 'px';
direct = 'right';
} else {
clearInterval(r_sun);
l_sun = setInterval(left_sun, 30);
direct = 'left';
}
}
left_sun = function() {
var obj = d.getElementById('sun');
if (obj.offsetLeft > 0)
obj.style.left = obj.offsetLeft + -1 + 'px';
else {
clearInterval(l_sun);
r_sun = setInterval(right_sun, 30);
}
}
var sinus = function() {
grad == 360 ? grad = 0 : grad++;
var position_sun = parseInt(200*Math.cos(rad * grad));
d.getElementById('sun').style.top = position_sun + 'px';
}
------------------------------------------------------------------ Вот как бы и всё! Подскажите, как и что нужно сделать чтобы заставить его двигаться по кругу! Всем спасибо! |
Вот сюда создай твой пример: http://jsfiddle.net, чтобы мы могли его запустить и посмотреть что ты вообще делаешь.
|
хмммм, ему похоже нужно что то вроде этого
<img src="http://javascript.ru/forum/images/smilies/smile.gif" alt="Солнце" id="sun" />
<script type="text/javascript">
function circle(){
angle=(angle+step)%360;
var rad=rad1*angle,
xx=x+Math.sin(rad)*radius,
yy=y+Math.cos(rad)*radius;
sun.style.top=yy+'px';
sun.style.left=xx+'px';
}
var pi=Math.PI,
rad1=pi/180,
angle=0,
radius=40,
step=5,
x=200,
y=50,
sun=document.getElementById('sun');
sun.style.position='absolute';
sun.style.top=y+'px';
sun.style.left=x+'px';
var t = setInterval(circle, 40);
</script>
|
По мне лучше использовать html5 тэг canvas и перерисовывать по ходу
На http://stackoverflow.com видел пару часов назад как раз то что нужно, но сейчас не могу найти в сафари история троит.. |
| Часовой пояс GMT +3, время: 05:17. |