Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Роль posTop и posLeft в данном скрипте


Автор: Finder128 18.8.2008, 13:35
Я сделал скрипт по образцу - скрипт движения змейкой. Вот его окончательный вариант:

Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>Untitled</title>
</head>
<body onload="move()" style="width:100%;overflow-x:hidden;overflow-y:hidden;">
</body>
<script>
var MarginUp=0
var MarginDown,MarginRight
var MarginLeft=0

//alert(MarginDown)
function StarObject(id,xpos,ypos){
    this.id=id
    this.xpos=xpos
    this.ypos=ypos
    }
    stars=new Array()
    
    
    var stepx=20
    var stepy=20
    var CasheImage=new Image()
    CasheImage.src="testimage86.gif"
    
        
var rand
    var picture
    var temp,temp2
    for (var i=0;i<12;i++){
    stars[i]=new StarObject("img"+i,0,0)
    
    
    picture='<img src="'+CasheImage.src+'" id="'+stars[i].id+'"'
    picture+='style="position:absolute;left:'+stars[i].xpos+';top:'+stars[i].ypos+';">'
    document.write(picture)
    }
    function randommaker(range) {  
 rand=Math.floor(range*Math.random())
    return rand
}
    //alert(ImgId[2])
    function move(){
    MarginDown=document.body.clientHeight-5
    MarginRight=document.body.clientWidth-5
    
    if (document.getElementById("img0").style.posLeft>MarginRight) {
stepx=(stepx+randommaker(2))*-1
document.getElementById(stars[0].id).style.posLeft-=1
}
if (document.getElementById("img0").style.posLeft<MarginLeft){
stepx=(stepx+randommaker(2))*-1
document.getElementById(stars[0].id).style.posLeft+=1
}

if (document.getElementById("img0").style.posTop<MarginUp){
stepy=(stepy+randommaker(2))*-1
document.getElementById(stars[0].id).style.posTop+=1
}
if (document.getElementById("img0").style.posTop>MarginDown){
stepy=(stepy+randommaker(2))*-1
document.getElementById(stars[0].id).style.posTop-=1
}
    for (i=11;i>=1;i--){
    
    
    stars[i].xpos=stars[i-1].xpos
    stars[i].ypos=stars[i-1].ypos
    
    
    }
    

stars[0].xpos=document.getElementById(stars[0].id).style.posLeft+stepx
stars[0].ypos=document.getElementById(stars[0].id).style.posTop+stepy
for (i=0;i<12;i++){


document.getElementById(stars[i].id).style.left=stars[i].xpos
document.getElementById(stars[i].id).style.top=stars[i].ypos

}
setTimeout("move()",40)
//alert("!!")
}
    </script>


Этот вариант я сделал сличив написанный мной вариант со скачанным в инете. В моём варианте в функции move()  проверка позиции делалась с использованием атрибутов left и top. В итоге скрипт оказывался глючным, змейка в какой-то момент, вместо того, чтобы оттолкнуться от стенки, начинала ползти вдоль неё и в конце концов исчезала за пределами экрана.
Так всё-таки, чем отличается posLeft от left, или posTop от top?
И ещё такой вопрос: для чего служит строчка кода " document.getElementById(stars[0].id).style.posLeft+=1"?
Для чего нужно прибавлять или убавлять единицу? Разобрался со всем кодом кроме этой строчки.

Автор: Sanchezzz 18.8.2008, 14:20
Цитата

И ещё такой вопрос: для чего служит строчка кода " document.getElementById(stars[0].id).style.posLeft+=1"?
Для чего нужно прибавлять или убавлять единицу? Разобрался со всем кодом кроме этой строчки.


ты находишь ID элемент и прибавляешь к left + одно значение к текущему. значению в стиле...

Автор: Finder128 19.8.2008, 11:50
Цитата(Sanchezzz @ 18.8.2008,  14:20)
Цитата

И ещё такой вопрос: для чего служит строчка кода " document.getElementById(stars[0].id).style.posLeft+=1"?
Для чего нужно прибавлять или убавлять единицу? Разобрался со всем кодом кроме этой строчки.


ты находишь ID элемент и прибавляешь к left + одно значение к текущему. значению в стиле...

Да нет, это-то и ежу понятно. Я в более широком смысле спрашиваю, что конкретно эта строчка делает, зачем нужно единицу прибавлять?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)