Я был бы готов поспорить, что проблема связана с моей математикой, а не с моим JavaScript, но ...
Я пытаюсь создать синусоидальную волну, которая имеет амплитуду (общую высоту)высота контейнера (в данном случае: 400px) и общая длина волны равна ширине контейнера (в данном случае: 600px).
Простым английским языком: я пытаюсь получить #theSun, чтобы подняться на левую сторону контейнера, дуги на 50% влево, а затем упасть, пока он не установится на 100% влево.
Может ли кто-нибудь одолжить мне глаза и определить, что я делаю неправильно?
Вот рабочий пример кода / что с ним не так: http://jsfiddle.net/fasterhorses/vbkPb/
// HTML
<div id="container">
<div id="theSun"></div>
</div>
// CSS
#container {
border: 1px solid #f00;
height: 400px;
width: 600px;
}
#theSun {
background: yellow;
height: 50px;
position: relative;
width: 50px;
}
// JavaScript (w/ jQuery 1.7)
var sun = $('#theSun');
var context = $('#container');
var contextHeight = context.height();
var contextWidth = context.width();
// Move sun to horizon line
sun.css({"top": contextHeight});
var a = contextHeight / 2;
var b = (Math.PI / contextWidth) * 2;
for (var i = 0; i <= contextWidth; i++) {
var arc = a * Math.sin(b * i);
if (i >= (contextWidth / 2)) {
sun.animate({
left: '+=' + i,
top: '+=' + arc
}, 500, function() {
// Animation complete.
});
} else {
sun.animate({
left: '+=' + i,
top: '-=' + arc
}, 500, function() {
// Animation complete.
});
}
}