Движение на java script
Ребят кому не сложно, поделитесь ссылкой.
Может кто видел в сети скрипт позволяющий реализовать движение одного объекта вокруг другого. Что-то вроде движения спутника вокруг планеты, но выглядеть это должно как в 3d пространстве, тоесть при движение, некоторое время объект виден, потом скрывается (к примеру за планетой), и через определенный промежуток времени, снова становиться виден. Но это должен быть не flash. |
Цитата:
http://javascript.ru/blog/Andrej-Par...cii-JavaScript http://javascript.ru/forum/misc/3689...mayatnika.html http://htmlbook.ru/css/z-index |
<html>
<head>
<style type="text/css">
#block {
position: absolute;
background-color: red;
width: 100px;
height: 80px;
color: white;
}
</style>
</head>
<body>
<div id="block">Наш блок</div>
<script type="text/javascript">
var obj = document.getElementById("block");
var i = 0;
/**
Функция moveBlock будет запускаться каждые 10 миллсекунд
**/
function moveBlock() {
obj.style.left = i;
obj.style.top = i;
i++;
}
//Каждые 5000 миллисекунд запускаем функцию test (5 секунд, 5000 миллисекунд)
setInterval(moveBlock, 10);
</script>
</body>
</html>
Идейка с z-index появилась, в сети нашел это скрипт, но вот беда, срабатывает он только в том случая когда отсутствует доктайп, стоит его только добавить и конструкция перестает работать. |
Все это можно сделать на SVG. Вот пример:
http://www.kevlindev.com/samples/orb.../orbit_svg.svg правда тут не скрывается, но допилить несложно. |
Благодарю)
|
Цитата:
|
Нашел на мой взгляд наиболее подходящее решение.
Все это дело выглядит следующим образом. Помогите допилить. Необходимо что бы z-index у img с id "luna" становился отрицательным в определенный момент анимации. Пробывал дописать if (omega>0.045) {obj.style.zIndex=(-10);} else {obj.style.zIndex=(10);}; где omega это время всей анимации, но ничего не вышло((
<!DOCTYPE html>
<html>
<head><title>Движение по эллипсу</title>
<link rel="stylesheet" href="css/docs.css" type="text/css" />
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<style type="text/css">body {background:white}</style>
</head>
<script>
var x0=200,y0=250; // центр эллипса
function ellipse(xid,x0,y0,alpha,a,b,omega) // эллиптическая орбита
{
var as=Math.sin(alpha*Math.PI/180);
var ac=Math.cos(alpha*Math.PI/180);
dt=5; // приращение времени
t=0;
//omega - угловая скорость, знак задает направление вращения
var x=a*Math.cos(omega*t); // начальное положение на эллипсе
var y=b*Math.sin(omega*t);
obj=document.getElementById(xid);
obj.style.top=(-x*as+y*ac+y0)+"px";
obj.style.left=(x*ac+y*as+x0)+"px";
setInterval("move(x0,y0,document.getElementById('alpha0').value,document.getElementById('a1').value,document.getElementById('b1').value,document.getElementById('omega1').value)",100)
}
function move(x0,y0,alpha,a,b,omega)// пересчет координат, вызывается из ellipse()
{
t=t+dt;
// x,y - координаты в собственной системе координат
var x=a*Math.cos(omega*t);
var y=b*Math.sin(omega*t);
var as=Math.sin(alpha*Math.PI/180);
var ac=Math.cos(alpha*Math.PI/180);
obj.style.top=(-x*as+y*ac+y0)+"px"; // переход в экранную систему координат
obj.style.left=(x*ac+y*as+x0)+"px";
}
</script>
<head>
<body
onload="ellipse('luna','planeta',x0,y0,document.getElementById('alpha0').value,document.getElementById('a1').value,document.getElementById('b1').value,document.getElementById('omega1').value)">
<img id="planeta" src="planeta.png" style="position:absolute;top:200px;left:120px; width: 200px;"/>
<img id="luna" src="sputnik.png" style="position:absolute;top:300px;left:190px; width: 30px;"/>
<h2>Движение по эллипсу</h2>
<h3>Параметры:</h3>
<input id="alpha0" type="text" value=0 size=4/>
угол наклона эллипса, град.(альфа)<br/>
<input id ="a1" type ="text" value=140 size=4/>
большая полуось (a) <br/>
<input id ="b1" type ="text" value=40 size=4/>
малая полуось (b) <br/>
<input id ="omega1" type ="text" value=0.09 size=4/>
угловая скорость (омега)
</body>
</html>
|
1) Будешь выкладывать здесь неотформатированный код - боженька накажет - зашлет тебе вирусов на комп.
2) Понятно что это - прототип. Но черт, мне было бы стыдно показывать людям такой засранный код. Причеши немного. 3) Решение "в лоб". Наверно можно сделать лучше.
<!DOCTYPE html>
<html>
<head><title>Движение по эллипсу</title>
<link rel="stylesheet" href="css/docs.css" type="text/css" />
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<style type="text/css">body {background:white}</style>
</head>
<script>
var x0=200,y0=250; // центр эллипса
function ellipse(xid,x0,y0,alpha,a,b,omega) // эллиптическая орбита
{
var as=Math.sin(alpha*Math.PI/180);
var ac=Math.cos(alpha*Math.PI/180);
dt=5; // приращение времени
t=0;
//omega - угловая скорость, знак задает направление вращения
var x=a*Math.cos(omega*t); // начальное положение на эллипсе
var y=b*Math.sin(omega*t);
obj=document.getElementById(xid);
obj.style.top=(-x*as+y*ac+y0)+"px";
obj.style.left=(x*ac+y*as+x0)+"px";
setInterval("move(x0,y0,document.getElementById('alpha0').value,document.getElementById('a1').value, document.getElementById('b1').value,document.getElementById('omega1').value)",20)
}
function move(x0,y0,alpha,a,b,omega)// пересчет координат, вызывается из ellipse()
{
t=t+dt;
// x,y - координаты в собственной системе координат
var x=a*Math.cos(omega*t);
var y=b*Math.sin(omega*t);
var as=Math.sin(alpha*Math.PI/180);
var ac=Math.cos(alpha*Math.PI/180);
obj.style.top=(-x*as+y*ac+y0)+"px"; // переход в экранную систему координат
obj.style.left=(x*ac+y*as+x0)+"px";
obj.style.zIndex = y < 0 ? -1 : 1;
}
</script>
<style>
#planeta{border-radius: 100%;background: blue;height: 200px;}
#luna{border-radius: 100%;background: gray;height:
30px}
</style>
<head>
<body
onload="ellipse('luna','planeta',x0,y0,document.getElementById('alpha0').value,document.getElementById('a1').value,document.getElementById('b1').value ,document.getElementById('omega1').value)">
<div id="planeta" style="position:absolute;top:200px;left:120px; width: 200px;"></div>
<div id="luna" style="position:absolute;top:300px;left:190px; width: 30px;"></div>
<h2>Движение по эллипсу</h2>
<h3>Параметры:</h3>
<input id="alpha0" type="text" value=0 size=4/>
угол наклона эллипса, град.(альфа)<br/>
<input id ="a1" type ="text" value=140 size=4/>
большая полуось (a) <br/>
<input id ="b1" type ="text" value=40 size=4/>
малая полуось (b) <br/>
<input id ="omega1" type ="text" value=0.01 size=4/>
угловая скорость (омега)
</body>
</html>
|
Цитата:
У тебя меняется угол - вот его и нанализируй... |
Форматирование подразумевает добавление отступов, для улучшения читабельности иерархии вложенности тегов?) я правильно понимаю?)
|
Спасибо огромное Вам за оперативную помощь и отзывчивость)
|
Цитата:
Но беда не в этом. Скопируй свой код и попробуй запустить его. И отпишись о результатах |
Да да, конструкция работает) еще раз спасибо)
Еще вопрос можно? Параметры элипса задаются через html форму, а возможно сделать так что бы к ним не было доступа со стороны пользователя, и задавались они вручную в теле самого скрипта? Я полагаю это позволило бы сократить вот это html строчку:
<body onload="ellipse('luna','planeta',x0,y0,document.getElementById('alpha0').value,document.getElementById('a1').value,document.getElementById('b1').value ,document.getElementById('omega1').value)">
И проще было бы разобрать с тем как к событию onload (которое насколько мне известно может применяться только один раз), подключить несколько функций. Вот вариант который имею на данный момент:
<!DOCTYPE html>
<html>
<head>
<title>Движение по эллипсу</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<script>
var x0=100,y0=100; // центр эллипса
function ellipse(xid,x0,y0,alpha,a,b,omega) // эллиптическая орбита
{
var as=Math.sin(alpha*Math.PI/180);
var ac=Math.cos(alpha*Math.PI/180);
dt=5; // приращение времени
t=0;
//omega - угловая скорость, знак задает направление вращения
var x=a*Math.cos(omega*t); // начальное положение на эллипсе
var y=b*Math.sin(omega*t);
obj=document.getElementById(xid);
obj.style.top=(-x*as+y*ac+y0)+"px";
obj.style.left=(x*ac+y*as+x0)+"px";
setInterval("move(x0,y0,document.getElementById('alpha0').value,document.getElementById('a1').value, document.getElementById('b1').value,document.getElementById('omega1').value)",20)
}
function move(x0,y0,alpha,a,b,omega)// пересчет координат, вызывается из ellipse()
{
t=t+dt;
// x,y - координаты в собственной системе координат
var x=a*Math.cos(omega*t);
var y=b*Math.sin(omega*t);
var as=Math.sin(alpha*Math.PI/180);
var ac=Math.cos(alpha*Math.PI/180);
obj.style.top=(-x*as+y*ac+y0)+"px"; // переход в экранную систему координат
obj.style.left=(x*ac+y*as+x0)+"px";
obj.style.zIndex = y < 0 ? -1 : 1;
}
</script>
<style>
#planeta {
border-radius: 100%;
background: blue;
height: 200px;
position:absolute;
width: 200px;
}
#luna {
border-radius: 100%;
background: gray;
height: 30px;
position:absolute;
width: 30px;
}
.none {
display: none;
}
</style>
</head>
<body onload="ellipse('luna','planeta',x0,y0,document.getElementById('alpha0').value,document.getElementById('a1').value,document.getElementById('b1').value ,document.getElementById('omega1').value)">
<div id="planeta"></div>
<div id="luna"></div>
<!-- Угол наклона эллипса, град.(альфа) -->
<input class="none" id="alpha0" type="text" value=0 size=4/>
<!-- Большая полуось (a) -->
<input class="none" id ="a1" type ="text" value=140 size=4/>
<!-- Малая полуось (b) -->
<input class="none" id ="b1" type ="text" value=40 size=4/>
<!-- Угловая скорость (омега) -->
<input class="none" id ="omega1" type ="text" value=0.01 size=4/>
</body>
</html>
|
Наркоман чтоле?
|
Цитата:
|
Цитата:
[JS]...[/JS] или [HTML]...[/HTML] |
Вобще, меня больше смущает это:
Цитата:
Цитата:
|
ну насчет пробелов, человек комментарием выше объяснил)
вот вопрос насчет наркомана не понял) а твою фразу - "Скопируй свой код и попробуй запустить его. И отпишись о результатах" я воспринял , как опробывать исправленный тобой код) |
Цитата:
Код, не обрамленый в [html] .. [/html]искажается. Чтоб ты понял предложил проверить самому. Как ты догалался нам приходится самим искать лишние пробелы и удалять. Не очень интересное времяпрепровождение. И тут на тебе! Заявляешь что все мол работает отлично, и в добавок постишь новую порцию неотформатированного искаженного кода. Нук какая тут еще реакция могла последовать? Правильно, мысли о наркомании.. |
ссори, яж новичок. ну теперь буду иметь ввиду)
|
| Часовой пояс GMT +3, время: 02:46. |