Drag inside and outside a range : Drag Drop : GUI Components JAVASCRIPT DHTML TUTORIALS


JAVASCRIPT DHTML TUTORIALS » GUI Components » Drag Drop »

 

Drag inside and outside a range



 /* dom-drag.js 09.25.2001 www.youngpup.net
  10.28.2001 - fixed minor bug where events
  sometimes fired off the handle, not the root.
*/



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html><head><title>DOM Drag Demo</title>

<style type="text/css">
<!--
html, body {
  height:100%;
  padding:0;
  margin:0;
  background:white;
  font:11px verdana;
  }

body {
  margin:15px 40px;
  }

#banner {
  position:absolute;
  top:0px; left:0px;
  height:100%;
  width:19px;
  }

h1 {
  font:11px verdana;
  font-weight:bold;
  margin-top:0;
  margin-bottom:1em;
  color:#FB3B00;
  }

  #b {
    cursor:move;
  }
  #g {
    cursor:hand;
    cursor:pointer;
  }

  #pbox {
    position:absolute;
    left:45px; top:40px;
    width:300px; height:275px;
    border:1px dashed #333399;
  }
-->
</style>
<script language="javascript">
/**************************************************
 * dom-drag.js
 * 09.25.2001
 * www.youngpup.net
 **************************************************
 * 10.28.2001 - fixed minor bug where events
 * sometimes fired off the handle, not the root.
 **************************************************/

var Drag = {

  obj : null,

  init : function(o, oRoot, minX, maxX, minY, maxY, bSwapHorzRef, bSwapVertRef, fXMapper, fYMapper)
  {
    o.onmousedown  = Drag.start;

    o.hmode      = bSwapHorzRef ? false true ;
    o.vmode      = bSwapVertRef ? false true ;

    o.root = oRoot && oRoot != null ? oRoot : o ;

    if (o.hmode  && isNaN(parseInt(o.root.style.left  ))) o.root.style.left   = "0px";
    if (o.vmode  && isNaN(parseInt(o.root.style.top   ))) o.root.style.top    = "0px";
    if (!o.hmode && isNaN(parseInt(o.root.style.right ))) o.root.style.right  = "0px";
    if (!o.vmode && isNaN(parseInt(o.root.style.bottom))) o.root.style.bottom = "0px";

    o.minX  = typeof minX != 'undefined' ? minX : null;
    o.minY  = typeof minY != 'undefined' ? minY : null;
    o.maxX  = typeof maxX != 'undefined' ? maxX : null;
    o.maxY  = typeof maxY != 'undefined' ? maxY : null;

    o.xMapper = fXMapper ? fXMapper : null;
    o.yMapper = fYMapper ? fYMapper : null;

    o.root.onDragStart  = new Function();
    o.root.onDragEnd  = new Function();
    o.root.onDrag    = new Function();
  },

  start : function(e)
  {
    var o = Drag.obj = this;
    e = Drag.fixE(e);
    var y = parseInt(o.vmode ? o.root.style.top  : o.root.style.bottom);
    var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
    o.root.onDragStart(x, y);

    o.lastMouseX  = e.clientX;
    o.lastMouseY  = e.clientY;

    if (o.hmode) {
      if (o.minX != null)  o.minMouseX  = e.clientX - x + o.minX;
      if (o.maxX != null)  o.maxMouseX  = o.minMouseX + o.maxX - o.minX;
    else {
      if (o.minX != nullo.maxMouseX = -o.minX + e.clientX + x;
      if (o.maxX != nullo.minMouseX = -o.maxX + e.clientX + x;
    }

    if (o.vmode) {
      if (o.minY != null)  o.minMouseY  = e.clientY - y + o.minY;
      if (o.maxY != null)  o.maxMouseY  = o.minMouseY + o.maxY - o.minY;
    else {
      if (o.minY != nullo.maxMouseY = -o.minY + e.clientY + y;
      if (o.maxY != nullo.minMouseY = -o.maxY + e.clientY + y;
    }

    document.onmousemove  = Drag.drag;
    document.onmouseup    = Drag.end;

    return false;
  },

  drag : function(e)
  {
    e = Drag.fixE(e);
    var o = Drag.obj;

    var ey  = e.clientY;
    var ex  = e.clientX;
    var y = parseInt(o.vmode ? o.root.style.top  : o.root.style.bottom);
    var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
    var nx, ny;

    if (o.minX != nullex = o.hmode ? Math.max(ex, o.minMouseX: Math.min(ex, o.maxMouseX);
    if (o.maxX != nullex = o.hmode ? Math.min(ex, o.maxMouseX: Math.max(ex, o.minMouseX);
    if (o.minY != nulley = o.vmode ? Math.max(ey, o.minMouseY: Math.min(ey, o.maxMouseY);
    if (o.maxY != nulley = o.vmode ? Math.min(ey, o.maxMouseY: Math.max(ey, o.minMouseY);

    nx = x + ((ex - o.lastMouseX(o.hmode ? : -1));
    ny = y + ((ey - o.lastMouseY(o.vmode ? : -1));

    if (o.xMapper)    nx = o.xMapper(y)
    else if (o.yMapper)  ny = o.yMapper(x)

    Drag.obj.root.style[o.hmode ? "left" "right"= nx + "px";
    Drag.obj.root.style[o.vmode ? "top" "bottom"= ny + "px";
    Drag.obj.lastMouseX  = ex;
    Drag.obj.lastMouseY  = ey;

    Drag.obj.root.onDrag(nx, ny);
    return false;
  },

  end function()
  {
    document.onmousemove = null;
    document.onmouseup   = null;
    Drag.obj.root.onDragEnd(  parseInt(Drag.obj.root.style[Drag.obj.hmode ? "left" "right"])
                  parseInt(Drag.obj.root.style[Drag.obj.vmode ? "top" "bottom"]));
    Drag.obj = null;
  },

  fixE : function(e)
  {
    if (typeof e == 'undefined') e = window.event;
    if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;
    if (typeof e.layerY == 'undefined') e.layerY = e.offsetY;
    return e;
  }
};
</script>
<script language="javascript">
  var reportBox, iReportCount = 0;

  window.onload = function() {
    if (document.all || document.getElementById)
    {
      var oB = document.all ? document.all["b": document.getElementById("b")
      var oG = document.all ? document.all["g": document.getElementById("g")
      var oP = document.all ? document.all["p": document.getElementById("p")
      
      reportBox  = document.all ? document.all["oReport": document.getElementById("oReport")
      reportBox2 = document.all ? document.all["oReport2": document.getElementById("oReport2")

      Drag.init(oB);
      Drag.init(oG);
      Drag.init(oP, null, 02740249);

      // report stuff
      oB.onDragStart = function(x, y) { reportDragStart("black", x, y)}
      oG.onDragStart = function(x, y) { reportDragStart("green", x, y)}
      oP.onDragStart = function(x, y) { reportDragStart("purple", x, y)}

      oB.onDragEnd = function(x, y) { reportDragEnd("black", x, y)}
      oG.onDragEnd = function(x, y) { reportDragEnd("green", x, y)}
      oP.onDragEnd = function(x, y) { reportDragEnd("purple", x, y)}

      oB.onDrag = function(x, y) { reportDrag("black", x, y)}
      oG.onDrag = function(x, y) { reportDrag("green", x, y)}
      oP.onDrag = function(x, y) { reportDrag("purple", x, y)}
    }

    function reportDragStart(who, x, y) {
      reportBox.value += who + " | onDragStart " " (" + x + "," + y + ")n"
    }

    function reportDragEnd(who, x, y) {
      reportBox.value += who + " | onDragEnd " " (" + x + "," + y + ")n"
    }

    function reportDrag(who, x, y) {
      reportBox2.value = who + " | onDrag " " (" + x + "," + y + ")"
    }
  }
</script>
</head>


<body>
  <div id="banner"></div>
  <h1>DOM-Drag Examples: Main Features</h1>
  <textarea id="oReport" style="margin-top: 320px; margin-left: 20px; width: 300px; height: 100px;" wrap="off"></textarea>
  <input onmouseover="this.runtimeStyle.border='2px solid red';" id="oReport2" style="margin-left: 20px; margin-top: 5px; width: 300px;" type="text">
  <!-- note that you don't have to contain a layer like this to constrain it. the DIV is only there so i can draw a border around it. -->
  <div id="pbox">
    <img id="p" title="isn't this simple pointer much better?" style="position: absolute; left: 134px; top: 156px;" src="p.gif">
  </div>
  <img id="b" title="these special cursors are really annoying" style="position: absolute; left: 145px; top: 118px;" src="b.gif">
  <img id="g" title="please don't use them" style="position: absolute; left: 118px; top: 131px;" src="g.gif">
</body>
</html>

           
       

Download : Download nav_DragDropRange.zip nav_DragDropRange.zip


-

Leave a Comment / Note


 
Verification is used to prevent unwanted posts (spam). .

Follow Navioo On Twitter

JAVASCRIPT DHTML TUTORIALS

 Navioo GUI Components
» Drag Drop