zoukankan      html  css  js  c++  java
  • js鼠标拖拽

    html

    <div id="box">
    </div>

    css

    *{margin:0;padding:0;}
    #box{width:200px;height:200px;background:cyan;position:absolute;}

    js

    <script type="text/javascript">
    /******
    拖拽原理:
    拖拽状态=0
    鼠标在元素上按下的时候{
    拖拽状态=1
    记录下鼠标的x和y坐标
    记录下元素的x和y坐标
    }
    鼠标在元素上移动的时候{
    如果拖拽状态是0就什么也不做
    如果拖拽状态是1,那么
    元素y = 现在鼠标y-原来鼠标y+原来元素y
    元素x = 现在鼠标x-原来鼠标x+原来元素X
    }
    鼠标在任何放开的时候{
    拖拽状态=0
    }
    ******/
    
    var isDown=false;
    var objLeft,objTop,posX,posY,obj;
    window.onload=function(){
    obj=document.getElementById('box');
    obj.onmousedown=down;
    obj.onmousemove=move;
    obj.onmouseup=up;
    }
    function down(event){
    obj.style.cursor="move";
    isDown=true;
    objLeft=obj.offsetLeft;
    objTop=obj.offsetTop;
    posX=parseInt(mousePosition(event).x);
    posY=parseInt(mousePosition(event).y);
    }
    function move(event){
    if(isDown==true){
    var x=parseInt(mousePosition(event).x-posX+objLeft);
    var y=parseInt(mousePosition(event).y-posY+objTop);
    var w=document.body.clientWidth-obj.offsetWidth;
    var h=document.body.clientHeight-obj.offsetHeight;
    console.log(x+","+y);
    if(x<0){
    x=0
    }else if(x>w){
    x=w
    };
    if(y<0){
    y=0
    }
    obj.style.left=x+"px";
    obj.style.top=y+"px";
    }
    }
    function up(){
    isDown=false;
    }
    function mousePosition(evt){
    var xPos,yPos;
    evt=evt||window.event;
    if(evt.pageX){
    xPos=evt.pageX;
    yPos=evt.pageY;
    }else{
    xPos=evt.clientX+document.body.scrollLeft-document.body.clientLeft;
    yPos=evt.clientY+document.body.scrollTop-document.body.clientTop;
    }
    return{
    x:xPos,
    y:yPos
    }
    }
    </script>
  • 相关阅读:
    学习过程
    一个链表中包含环,请找出该链表的环的入口结点
    归并排序-递归实现
    31、求整数范围中1的个数
    冒泡排序
    常用的端口对应的协议
    数值的整数次方
    二分查找(折半查找)
    用两个队列模拟栈的弹出和输入
    Java源码-HashMap(jdk1.8)
  • 原文地址:https://www.cnblogs.com/lixiaoxing/p/5025659.html
Copyright © 2011-2022 走看看