Com o aumento da quantidade de funcionalidades construídas com Javascript novos requisitos surgem a cada dia. Requisitos que antes não eram tão comuns (como a manipulação/movimentação de objetos gráficos em um browser) tornam-se triviais, pois aumentam a usabilidade da aplicação tornando o seu uso fácil, agradável, rápido e de fácil assimilação.
O exemplo abaixo demonstra como é possível identificar a sobreposição de objetos HTML utilizando código Javascript.
Como isso funciona? O algoritmo identifica quando um objeto é sobreposto, alterando sua cor para sinalizar a sobreposição. E assim que o objeto deixa de ser sobreposto sua cor volta ao estado inicial.
Segue o exemplo de uso:
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script type="text/javascript"> var defaultJump = 10; function goUp() { moveDiv('v', -(defaultJump)); setOverControlColor(); } function goRight() { moveDiv('h', defaultJump); setOverControlColor(); } function goLeft() { moveDiv('h', -(defaultJump)); setOverControlColor(); } function goDown() { moveDiv('v', defaultJump); setOverControlColor(); } function setOverControlColor() { var target = document.getElementById('divTarget'); if (isControlOverControl("divController", "divTarget")) { target.style.background = "red"; } else { target.style.background = "green"; } } function moveDiv(direction, pixels) { var div = document.getElementById('divController'); if (direction == 'v') { var value = Number(div.style.top.replace("px", "")); value = value + pixels; if (value < 0) value = 0; div.style.top = value + "px"; } else if (direction == 'h') { var value = Number(div.style.left.replace("px", "")); value = value + pixels; if (value < 0) value = 0; div.style.left = value + "px"; } } function isControlOverControl(upControl, downControl) { var div = document.getElementById(upControl); var target = document.getElementById(downControl); var startLeft = Number(div.style.left.replace("px", "")) - Number(div.style.borderLeftWidth.replace("px", "")); var endLeft = startLeft + Number(div.style.width.replace("px", "")) + Number(target.style.borderRightWidth.replace("px", "")); var startTop = Number(div.style.top.replace("px", "")) - Number(target.style.borderTopWidth.replace("px", "")); var endTop = startTop + Number(div.style.height.replace("px", "")) + Number(target.style.borderBottomWidth.replace("px", "")); var startLeftTarget = Number(target.style.left.replace("px", "")) - Number(target.style.borderLeftWidth.replace("px", "")); var endLeftTarget = startLeftTarget + Number(target.style.width.replace("px", "")) + Number(target.style.borderRightWidth.replace("px", "")); var startTopTarget = Number(target.style.top.replace("px", "")) - Number(target.style.borderTopWidth.replace("px", "")); var endTopTarget = startTopTarget + Number(target.style.height.replace("px", "")) + Number(target.style.borderBottomWidth.replace("px", "")); var horizontal = false; var vertical = false; if ((endTop >= endTopTarget && startTop <= endTopTarget) || (endTop <= endTopTarget && endTop >= startTopTarget)) vertical = true; if ((endLeft >= endLeftTarget && startLeft <= endLeftTarget) || (endLeft <= endLeftTarget && endLeft >= startLeftTarget)) horizontal = true; return vertical & horizontal; } </script> </head> <body> <div id="divTarget" style="position:absolute;width:300px; height:300px;background-color:green;border:1px solid black;top:100px;left:200px"> </div> <div id="divController" style="background-color:whitesmoke;position:absolute;width:120px;height:100px;display:block;border:1px solid black;top:320px;left:10px"> <label>Coordinates</label> <table> <tr> <td><input type="submit" value="Up" onclick="javascript: goUp();" /></td> <td><input type="submit" value="Down" onclick="javascript: goDown();" /></td> </tr> <tr> <td><input type="submit" value="Left" onclick="javascript: goLeft();" /></td> <td><input type="submit" value="Right" onclick="javascript: goRight();" /></td> </tr> </table> </div> </body> </html>
As imagens abaixo detalham o funcionamento do algoritmo:
1 – Objetos HTML sem sobreposição
2 – Objetos HTML próximos
3 – Objetos HTML sobrepostos
Por
MSc. Fernando Henrique Inocêncio Borba Ferreira
Microsoft Most Valuable Professional – Visual C#