drag&drop при перекрывающихся блоках
Доброго времени суток, помогите пожалуйста решить проблему. На сереньком блоке висит функция перетаскивания блока. В нем находится другой блок - зелененький, на него повешены другие события мышки. Как сделать так чтобы серый блок нельзя было перетаскивать при нажатии на зеленый блок? Событие все равно почему-то срабатывает.
И второй вопрос. После того как перетащил куда-нибудь серый блок, в консоле штампуются ошибки: "mousePageXY is not defined". Как это исправить?
<div id='gray' style=" position:absolute; border:1px solid blue; background-color: #C0C0C0; width:100px; height:100px; cursor:pointer" >
<div style="border:1px solid red; background-color:#33FF66; width:40px; height:40px" id="green"></div>
</div>
<script>
document.getElementById('gray').onmousedown = function(event){drag_object(event, this)}
function drag_object( evt, obj ){
evt = evt || window.event;
obj.clicked = true;
obj.mousePosX = evt.clientX;
obj.mousePosY = evt.clientY;
if( evt.preventDefault ) evt.preventDefault();
else evt.returnValue = false;
document.onmouseup = function(){ obj.clicked = false;document.onmousemove = function(e){mousePageXY(e)} }
document.onmousemove = function( evt )
{
evt = evt || window.event;
if( obj.clicked )
{
posLeft = !obj.style.left ? obj.offsetLeft : parseInt( obj.style.left );
posTop = !obj.style.top ? obj.offsetTop : parseInt( obj.style.top );
mousePosX = evt.clientX;
mousePosY = evt.clientY;
obj.style.left = posLeft + mousePosX - obj.mousePosX + 'px';
obj.style.top = posTop + mousePosY - obj.mousePosY + 'px';
obj.mousePosX = mousePosX;
obj.mousePosY = mousePosY;
}
}
}
function setcookie( name, value, timeout )
{
timeout = timeout || 1000*60*60*24;
expires = (new Date((new Date).getTime() + timeout)).toUTCString();
document.cookie = name + '=' + value + ';expires=' + expires;
}
</script>
|
Цитата:
Цитата:
document.getElementById('gray').onmousedown = function(event){
if (event.target.id != 'gray') return;
drag_object(event, event.target);
};
|
Цитата:
document.onmouseup = function(){
obj.clicked = false;
document.onmousemove = function(e){
mousePageXY(e)
};
};
Вот тут вызывается эта функция, но в приведенном тобой коде нет определения функции mousePageXY. |
Цитата:
Decode, Спасибо вам, все работает теперь как надо :) |
<div id='gray' onmousedown = function(event){drag_object(event, this)} style=" position:absolute; border:1px solid blue; background-color: #C0C0C0; width:100px; height:100px; cursor:pointer" >
<div style="border:1px solid red; background-color:#33FF66; width:40px; height:40px" id="green"></div>
</div>
<script>
//document.getElementById('gray').onmousedown = function(event){drag_object(event, this)}
function drag_object( evt, obj ){
evt = evt || window.event;
obj.clicked = true;
obj.mousePosX = evt.clientX;
obj.mousePosY = evt.clientY;
if( evt.preventDefault ) evt.preventDefault();
else evt.returnValue = false;
document.onmouseup = function(){ obj.clicked = false;}
document.onmousemove = function( evt )
{
evt = evt || window.event;
if( obj.clicked )
{
posLeft = !obj.style.left ? obj.offsetLeft : parseInt( obj.style.left );
posTop = !obj.style.top ? obj.offsetTop : parseInt( obj.style.top );
mousePosX = evt.clientX;
mousePosY = evt.clientY;
obj.style.left = posLeft + mousePosX - obj.mousePosX + 'px';
obj.style.top = posTop + mousePosY - obj.mousePosY + 'px';
obj.mousePosX = mousePosX;
obj.mousePosY = mousePosY;
}
}
}
function setcookie( name, value, timeout )
{
timeout = timeout || 1000*60*60*24;
expires = (new Date((new Date).getTime() + timeout)).toUTCString();
document.cookie = name + '=' + value + ';expires=' + expires;
}
</script>
Если 5ю строку, что вешает функцию, перенести в сам див блок, то не получается ее прилепить к блоку :( Как не пробовал, не работает :( Подскажите пожалуйста, как надо ? |
фонарик,
onmousedown="if (event.target.id != 'gray') return; drag_object(event, event.target); |
Decode, все работает, спасибо.
<div id='gray' onmousedown="if (event.target.id != 'gray') return; drag_object(event, event.target)"; style=" position:absolute; border:1px solid blue; background-color: #C0C0C0; width:100px; height:100px; cursor:pointer" >
<div style="border:1px solid red; background-color:#33FF66; width:40px; height:40px" id="green"></div>
</div>
<script>
//document.getElementById('gray').onmousedown = function(event){drag_object(event, this)}
function drag_object( evt, obj ){
evt = evt || window.event;
obj.clicked = true;
obj.mousePosX = evt.clientX;
obj.mousePosY = evt.clientY;
if( evt.preventDefault ) evt.preventDefault();
else evt.returnValue = false;
document.onmouseup = function(){ obj.clicked = false;}
document.onmousemove = function( evt )
{
evt = evt || window.event;
if( obj.clicked )
{
posLeft = !obj.style.left ? obj.offsetLeft : parseInt( obj.style.left );
posTop = !obj.style.top ? obj.offsetTop : parseInt( obj.style.top );
mousePosX = evt.clientX;
mousePosY = evt.clientY;
obj.style.left = posLeft + mousePosX - obj.mousePosX + 'px';
obj.style.top = posTop + mousePosY - obj.mousePosY + 'px';
obj.mousePosX = mousePosX;
obj.mousePosY = mousePosY;
}
}
}
function setcookie( name, value, timeout )
{
timeout = timeout || 1000*60*60*24;
expires = (new Date((new Date).getTime() + timeout)).toUTCString();
document.cookie = name + '=' + value + ';expires=' + expires;
}
</script>
|
| Часовой пояс GMT +3, время: 12:27. |