如何在页面上拖放<div> </div>

时间:2014-03-04 13:57:14

标签: javascript html css

我正在开发一个Web应用程序,我正在尝试使用标签模拟弹出窗口,以用于样式目的。我用这个javascript代码完成了这个:

<script>
  function handleClick(url){
      document.getElementById("results").style.display = 'block';
      document.getElementById("about").innerHTML='<object type="text/html" data="'+url+'" ></object>';
      }
  function cleanDiv() {
      document.getElementById("results").style.display = 'none';
      document.getElementById("about").innerHTML=' ';
  }
  </script>

与此HTML代码相关联:

<section class="about" id="results">
    <div align="right"><a href="#" onclick="cleanDiv()">Fechar</a></div>
    <div id="about" algin="center"></div>
  </section>

并且样式在我的css文件中。

我几乎拥有我想要的所有东西,但我希望这个“弹出窗口”不会固定在页面上的独特位置,用户可以用鼠标移动它。

有人知道如何使用javascript / html / css进行此操作吗?

2 个答案:

答案 0 :(得分:0)

您正在寻找HTML5 draggable属性和事件。通过设置draggable="true"ondragstart="dragElem(event)"使元素可拖动。然后在function dragElem(ev) { }中编写代码。见W3Schools

答案 1 :(得分:0)

经过更多搜索后,我结束了此代码,来自网站http://waseemblog.com/42/movable-div-using-javascript.html

<强> HTML:

<section class="about" id="results" style="left: 183px; top: 111px;" onMouseDown="dragStart(event, 'results');">
    <div align="right"><a href="#" class="classname" onclick="cleanDiv()">X</a></div>
    <div id="content" align="center"></div>
  </section>

<强>的javascript:

function getID(id)
{
    return document.getElementById(id);
}

// Global object to hold drag information.
var dragObj = new Object();

function dragStart(event, id) {
  var x, y;
  dragObj.elNode = getID(id);
  // Get cursor position with respect to the page.
  try {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  catch (e) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }
  // Save starting positions of cursor and element.
  dragObj.cursorStartX = x;
  dragObj.cursorStartY = y;
  dragObj.elStartLeft  = parseInt(dragObj.elNode.style.left, 10);
  dragObj.elStartTop   = parseInt(dragObj.elNode.style.top,  10);
  if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;
  if (isNaN(dragObj.elStartTop))  dragObj.elStartTop  = 0;
  // Capture mousemove and mouseup events on the page.
  try {
    document.attachEvent("onmousemove", dragGo);
    document.attachEvent("onmouseup",   dragStop);
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  catch (e) {
    document.addEventListener("mousemove", dragGo,   true);
    document.addEventListener("mouseup",   dragStop, true);
    event.preventDefault();
  }
}

function dragGo(event) {
 var x, y;
 // Get cursor position with respect to the page.
 try  {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  catch (e) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }
  // Move drag element by the same amount the cursor has moved.
  var drLeft = (dragObj.elStartLeft + x - dragObj.cursorStartX);
  var drTop = (dragObj.elStartTop  + y - dragObj.cursorStartY);
  if (drLeft > 0)
  {
     dragObj.elNode.style.left = drLeft  + "px";
  }
  else
  {
    dragObj.elNode.style.left = "1px";
  }
  if (drTop > 0)
  {
     dragObj.elNode.style.top  = drTop + "px";
  }
  else
  {
    dragObj.elNode.style.top  = "1px";
  }
  try {
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  catch(e){
    event.preventDefault();
  }
}

function dragStop(event) {
  // Stop capturing mousemove and mouseup events.
  try {
    document.detachEvent("onmousemove", dragGo);
    document.detachEvent("onmouseup",   dragStop);
  }
  catch (e) {
    document.removeEventListener("mousemove", dragGo,   true);
    document.removeEventListener("mouseup",   dragStop, true);
  }
}

它可能比使用jquery的对手大,但我想它在今天的大多数浏览器中都能正常工作。