Перетаскивание рисунков
Подскажите ответ на такой вопрос:
есть скрипт для перетаскивания рисунков, вопрос такой - как сделать, например, всплывающее окно типа "правильно", если рисунки перетасканы правильно в определенных последовательностях. например есть рисунки стенка, крыша, труба. надо перетащить их так чтобы дверь находилась на стенке, крыша касалась верхней грани стенки, а труба касалась крыши. как это сделать? причем желательно чтобы сам домик не зависел от конкретной точки экрана, а только взаимное расположение рисунков играло роль. если можно, пример из простейших деталей, например, два кубика соприкасаются гранями) изначальный скрипт, позволяющий перетаскивать рисунки в любом порядке: 1. Создаём файлы таблицы стилей drag.css:
.drag{
position:relative;
cursor:hand;
z-index: 100;
}
подгружаем: <link rel="stylesheet" href="ПУТЬ К ФАЙЛУ/drag.css" type="text/css" /> 2. Сам скрипт drag.js написанный на языке javascript:
var dragobject={
z: 0, x: 0, y: 0, offsetx : null, offsety : null, targetobj : null, dragapproved : 0,
initialize:function(){
document.onmousedown=this.drag
document.onmouseup=function(){this.dragapproved=0}
},
drag:function(e){
var evtobj=window.event? window.event : e
this.targetobj=window.event? event.srcElement : e.target
if (this.targetobj.className=="drag"){
this.dragapproved=1
if (isNaN(parseInt(this.targetobj.style.left))){this. targetobj.style.left=0}
if (isNaN(parseInt(this.targetobj.style.top))){this.t argetobj.style.top=0}
this.offsetx=parseInt(this.targetobj.style.left)
this.offsety=parseInt(this.targetobj.style.top)
this.x=evtobj.clientX
this.y=evtobj.clientY
if (evtobj.preventDefault)
evtobj.preventDefault()
document.onmousemove=dragobject.moveit
}
},
moveit:function(e){
var evtobj=window.event? window.event : e
if (this.dragapproved==1){
this.targetobj.style.left=this.offsetx+evtobj.clie ntX-this.x+"px"
this.targetobj.style.top=this.offsety+evtobj.clien tY-this.y+"px"
return false
}
}
}
dragobject.initialize()
подгружаем: <script language="JavaScript" type="text/javascript" src="ПУТЬ К ФАЙЛУ/drag.js"></script> 3. Вставляем файлы с изображениями в нужное место: <img src="ПУТЬ К ФАЙЛУ1/1.png" class="drag"> <img src="ПУТЬ К ФАЙЛУ2/2.png" class="drag"> <img src="ПУТЬ К ФАЙЛУ3/3.png" class="drag"> |
1. Сделай код читаемым.
2. Используй поиск, были темы с всплывающими окнами. 3. Ты хоть немного js знаешь? |
Всплывающие окна это понятно, самое гланое момент, когда они должны всплывать, т.е.
if ( взаимное расположение рисунков верно ) { окно всплывает } js на самом базовам уровне, можно сказать не знаю, так что изучаю по ходу дела |
Ну видимо нужно проверить координаты каждого объекта, если они соответствуют заданному диапазону значений, то всплывает окно.
Ребят, подскажите как это выглядит на js , вот именно проверка координат, реально надо. Или в каком разделе учебников вообще искать. |
|
Kolyaj,
спасибо, почитал и эту и drag'n'drop , возможно, я что-то не понял, но такой вопрос - как отслеживать координаты именно каждого рисунка вне зависимости от экрана. когда их взаимное расположение верно, всплывает окно. |
Да, действительно не понял.
function getOffsetRect(elem) {
// (1)
var box = elem.getBoundingClientRect()
// (2)
var body = document.body
var docElem = document.documentElement
// (3)
var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop
var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft
// (4)
var clientTop = docElem.clientTop || body.clientTop || 0
var clientLeft = docElem.clientLeft || body.clientLeft || 0
// (5)
var top = box.top + scrollTop - clientTop
var left = box.left + scrollLeft - clientLeft
return { top: Math.round(top), left: Math.round(left) }
}
кто-нибудь может подсказать, как сделать, чтобы этим самым elem был отслеживаемый рисунок? |
|
Skipp,спасибо
document.getElementsById(id); - нужно использовать div'ы , чтобы картинку двигать? к примеру, здесь должно всплыть окно, если два квадрата наложены строго друг на друга (т.е. координаты совпадают)
var dragobject={
z: 0, x: 0, y: 0, offsetx : null, offsety : null, targetobj : null, dragapproved : 0,
initialize:function(){
document.onmousedown=this.drag
document.onmouseup=function(){this.dragapproved=0}
},
drag:function(e){
var evtobj=window.event? window.event : e
this.targetobj=window.event? event.srcElement : e.target
if (this.targetobj.className=="drag"){
this.dragapproved=1
if (isNaN(parseInt(this.targetobj.style.left))){this.targetobj.style.left=0}
if (isNaN(parseInt(this.targetobj.style.top))){this.targetobj.style.top=0}
this.offsetx=parseInt(this.targetobj.style.left)
this.offsety=parseInt(this.targetobj.style.top)
this.x=evtobj.clientX
this.y=evtobj.clientY
if (evtobj.preventDefault)
evtobj.preventDefault()
document.onmousemove=dragobject.moveit
}
},
moveit:function(e){
var evtobj=window.event? window.event : e
if (this.dragapproved==1){
this.targetobj.style.left=this.offsetx+evtobj.clientX-this.x+"px"
this.targetobj.style.top=this.offsety+evtobj.clientY-this.y+"px"
return false
}
}
}
dragobject.initialize()
//возвращает координаты
function getOffsetRect(elem) {
var box = elem.getBoundingClientRect()
var body = document.body
var docElem = document.documentElement
var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop
var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft
var clientTop = docElem.clientTop || body.clientTop || 0
var clientLeft = docElem.clientLeft || body.clientLeft || 0
var top = box.top + scrollTop - clientTop
var left = box.left + scrollLeft - clientLeft
return { top: Math.round(top), left: Math.round(left) }
}
//проверяем координаты квадратов
function proverka() {
var x = document.getElementsByTagName('blueobj');
var y = document.getElementsByTagName('orangeobj');
if ( getOffsetRect(x) == getOffsetRect(y))
{ alert("you are right") };
}
<head>
<link rel="stylesheet" href="drag.css" type="text/css" />
<script language="JavaScript" type="text/javascript" src="drag.js"></script>
<body>
<input type="button" onclick="proverka()" value="check"/>
</body>
<div id="blueobj"> <img src="1.jpg" class="drag"> </div>
<div id="orangeobj"> <img src="2.jpg" class="drag"> </div>
</head>
что я не так делаю? хотя подозреваю, что вообще все это неверно и что я не знаю нифига |
function proverka() {
var x = document.getElementsByTagName('img')[0];
var y = document.getElementsByTagName('img')[1];
if ( getOffsetRect(x) == getOffsetRect(y))
{ alert("you are right") };
}
и так тоже не работает |
| Часовой пояс GMT +3, время: 09:30. |