Помогите с условием
Добрго времени суток уважаемые знатоки
есть код который работает с косяком если посмотрите увидите его. подскажите как исправить. или хотябы наводящие вопросы. За любую помощь заранее благодарен <!DOCTYPE html> <html> <head> <title></title> <style> #wrapper{ position: relative; border: 2px solid #000000; width: 500px; height: 400px; } #test{ width: 100px; height: 100px; position: absolute; background: #ff0000; } </style> </head> <body> <div id="wrapper"> <div id="test"></div> </div> <script type="text/javascript"> var direction = [[1,1], [1,-1], [-1,-1], [-1,1]]; var direct = 0; function move() { var elem = document.getElementById('test'); var left = 0; var top = 0; function frame() { var currentCoord = [left, top]; var nextCoord = currentCoord.map(function(value, index) { return value + direction[direct][index] } ); elem.style.left = nextCoord[0] + 'px'; elem.style.top = nextCoord[1] + 'px'; left = nextCoord[0]; top = nextCoord[1]; var x = 0; var y = 1; if ( nextCoord[y] == 300 ) { direct = 1; } if ( nextCoord[x] == 400 ) { direct = 2; } if ( nextCoord[y] == 0 ) { direct = 3; } if( nextCoord[x] == 0 ) { direct = 0; } } var timer = setInterval(frame, 1); } move(); </script> </body> </html> |
А эти извращения с массивами принципиальны? И если да, то почем всё-таки не сделать как-то так:
<!DOCTYPE html> <html> <head> <title></title> <style> #wrapper{ position: relative; border: 2px solid #000000; width: 500px; height: 400px; } #test{ width: 100px; height: 100px; position: absolute; background: #ff0000; } </style> </head> <body> <div id="wrapper"> <div id="test"></div> </div> <script type="text/javascript"> var direction = [[1,1], [1,-1], [-1,-1], [-1,1]]; var direct = 0; var directionDif = [1,1]; function move() { var elem = document.getElementById('test'); var left = 0; var top = 0; function frame() { var currentCoord = [left, top]; var nextCoord = currentCoord.map(function(value, index) { return value + directionDif[index]; }); elem.style.left = nextCoord[0] + 'px'; elem.style.top = nextCoord[1] + 'px'; left = nextCoord[0]; top = nextCoord[1]; var x = 0; var y = 1; if ( nextCoord[y] >= 300 ) { directionDif[y] = -1; } if ( nextCoord[x] >= 400 ) { directionDif[x] = -1; } if ( nextCoord[y] <= 0 ) { directionDif[y] = 1; } if( nextCoord[x] <= 0 ) { directionDif[x] = 1; } } var timer = setInterval(frame, 1); } move(); </script> </body> </html> ? |
jsnb,
Спасибо. А я просто не сообразил как сделать без массива направления. если подскажете буду благодарен. |
Цитата:
Пусть это будут dx и dy соответственно. Если подошли к левой границе по x делаем dx положительным, а если к правой, то отрицательным. С dy аналогично. Соответственно на каждом шаге прибавляем dx и dy к текущим координатам. |
Цитата:
|
Часовой пояс GMT +3, время: 10:33. |