当前位置: 代码迷 >> JavaScript >> js兑现 鼠标拖动图片
  详细解决方案

js兑现 鼠标拖动图片

热度:218   发布时间:2012-10-15 09:45:24.0
js实现 鼠标拖动图片
<html>
<head>
<title>拖动演示</title>
</head>
<style type="text/css">
    #plane1 {position:absolute; left:10; top:20;  z-index:5}
    #plane2 {position:absolute; left:10; top:20; width:800; height:600; z-index:999; background:url(mask1.png) no-repeat;}
</style>
<SCRIPT LANGUAGE="JavaScript">

var isNav, isIE
if (parseInt(navigator.appVersion) >= 4) {
    if (navigator.appName == "Netscape") {
        isNav = true
    } else {
        isIE = true
    }
}


function setZIndex(obj, zOrder) {
    obj.zIndex = zOrder
}


function shiftTo(obj, x, y) {
    if (isNav) {
        obj.moveTo(x,y)
    } else {
        obj.pixelLeft = x
        obj.pixelTop = y
    }
}
// ***End API Functions***

// Global holds reference to selected element
var selectedObj
// Globals hold location of click relative to element
var offsetX, offsetY

// Find out which element has been clicked on


function setSelectedElem(evt) {
    if (isNav) {
        // declare local var for use in upcoming loop
        var testObj
        // make copies of event coords for use in upcoming loop
        var clickX = evt.pageX
        var clickY = evt.pageY
        // loop through all layers (starting with frontmost layer)
        // to find if the event coordinates are in the layer
        for (var i = document.layers.length - 1; i >= 0; i--) {
            testObj = document.layers[i]
            if ((clickX > testObj.left) &&
                (clickX < testObj.left + testObj.clip.width) &&
                (clickY > testObj.top) &&
                (clickY < testObj.top + testObj.clip.height)) {
                    // if so, then set the global to the layer, bring it
                    // forward, and get outa here
                    selectedObj = testObj
                    setZIndex(selectedObj, 100)
                    return
            }
        }
    } else {
        // use IE event model to get the targeted element
        var imgObj = window.event.srcElement
        // make sure it's one of our planes
        if (imgObj.parentElement.id.indexOf("plane") != -1) {
            // then set the global to the style property of the element,
            // bring it forward, and say adios
            selectedObj = imgObj.parentElement.style
            setZIndex(selectedObj,100)
            return
        }
    }
    // the user probably clicked on the background
    selectedObj = null
    return
}
// Drag an element
function dragIt(evt) {
    // operate only if a plane is selected
    if (selectedObj) {
        if (isNav) {
            shiftTo(selectedObj, (evt.pageX - offsetX), (evt.pageY - offsetY))
        } else {
            shiftTo(selectedObj, (window.event.clientX - offsetX), (window.event.clientY - offsetY))
            // prevent further system response to dragging in IE
            return false
        }
    }
}
// Set globals to connect with selected element
function engage(evt) {
    setSelectedElem(evt)
    if (selectedObj) {
        // set globals that remember where the click is in relation to the
        // top left corner of the element so we can keep the element-to-cursor
        // relationship constant throughout the drag
        if (isNav) {
            offsetX = evt.pageX - selectedObj.left
            offsetY = evt.pageY - selectedObj.top
        } else {
            offsetX = window.event.offsetX
            offsetY = window.event.offsetY
        }
    }
    // block mouseDown event from forcing Mac to display
    // contextual menu.
    return false
}
// Restore elements and globals to initial values
function release(evt) {
    if (selectedObj) {
        setZIndex(selectedObj, 0)
        selectedObj = null
    }
}
// Turn on event capture for Navigator
function setNavEventCapture() {
    if (isNav) {
        document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP)
    }
}
// Assign event handlers used by both Navigator and IE (called by onLoad)
function init() {
    if (isNav) {
        setNavEventCapture()
    }
    // assign functions to each of the events (works for both Navigator and IE)
    document.onmousedown = engage
    document.onmousemove = dragIt
    document.onmouseup = release


}
</SCRIPT>
<body bgcolor="#fef4d9" onLoad="init()">
<table width="1000" height="800" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="800" rowspan="3">
    <DIV ID=plane1 ><img name="planePic1" src="vista.jpg" border=0></DIV>
<DIV ID=plane2 >
         <input type="submit" name="button" id="button" value="向上">
      <input type="submit" name="button" id="button" value="向下" onClick="down()">
      <input type="submit" name="button" id="button" value="向左">
     
      <input type="submit" name="button" id="button" value="向右"></DIV>    </td>
    <td width="139">&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
  </tr>
</table>
</body>
</html>
  相关解决方案