JS 鼠标事件练习—拖拽效果

拖拽效果

HTML

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>拖拽效果</title>
        <link rel="stylesheet" type="text/css" href="拖拽效果.css">
    </head>
    <body>
        <div id="box">
            <h1 id="heading">点击拖拽</h1>
        </div>
        <script src="拖拽效果.js"></script>
    </body>
</html>

CSS

#box {
    width:300px;
    height:300px;
    background-color:red;
    padding:10px;
    border:5px solid green;
    text-align: center;
    position:absolute;
    top:50px;
    left:50px;
}

#heading {
    background-color: blue;
}

JavaScript

//页面加载完毕之后调用drag函数
window.onload = drag;

//封装drag函数
function drag() {
    //获取heading元素
    var heading = document.getElementById("heading");
    //鼠标在heading元素区域按下时执行fnDown函数
    heading.onmousedown = fnDown;
    //鼠标在页面中松开时取消拖拽效果
    document.onmouseup = function() {
        document.onmousemove = null;
    };
};

//封装fnDown函数
function fnDown(event) {
    event = event || window.event;
    var box = document.getElementById("box"),
        heading = document.getElementById("heading"),
        //取得鼠标点击的那个点与box左上角的距离
        disY = event.clientY - box.offsetTop,
        disX = event.clientX - box.offsetLeft;
    //鼠标在页面中移动时执行匿名函数
    document.onmousemove = function(event) {
        event = event || window.event;
        //核心思想是:鼠标在哪儿,box跟到哪儿
        //计算box距离页面左上角的距离
        var t = event.clientY - disY,
            l = event.clientX - disX,
            window_width = document.documentElement.clientWidth || document.body.clientWidth,
            window_height = document.documentElement.clientHeight || document.body.clientHeight,
            max_t = window_height - box.offsetHeight,
            max_l = window_width - box.offsetWidth;
        //控制box移动的最大最小距离
        if(t < 0) {
            t = 0;
        } else if(t > max_t) {
            t = max_t;
        };
        if(l < 0) {
            l = 0;
        } else if(l > max_l) {
            l = max_l;
        };
        //box的位置跟随鼠标光标
        box.style.top = t + "px";
        box.style.left = l + "px";
    };
};
时间: 2024-12-09 17:43:17

JS 鼠标事件练习—拖拽效果的相关文章

js拖拽效果的原理及实现

js中元素的拖拽效果需要用到的主要的知识点为:事件侦听和鼠标事件.即被拖拽的元素添加事件侦听,侦听的事件主要为mousedown,mousemove和mouseup,一些情况下还需要用到mouseleave.本篇所针对的原理是存在多个相同元素情况下的拖拽.下面结合案例进行分析.1.首先在body中创建7个div元素,并设置css样式. <style> div{ width:50px; height: 50px; background-color: red; position: absolute

Android DragAndDrop API 拖拽效果 交换ListView的Item值

前言 Android系统自API Level11开始添加了关于控件拖拽的相关API,可以方便的实现控件的一些拖拽效果,而且比自己用Touch事件写的效果更好.下面就来看下DragAndDrop吧. 使用Android的DragAndDrop框架,我们可以方便的在当前布局中用拖拽的形式实现两个View之间数据的互换.DragAndDrop框架包括一个拖拽事件的类,拖拽监听器,以及一些帮助方法和类. 尽管DragAndDrop主要是为了数据移动而设计,但是我们也可用他做别的UI处理.举个例子,我们可

js实现鼠标的拖拽效果

拖拽效果在我们上网的过程中是很常见的,大家都应该在电脑上面登陆过qq吧,当这个qq的登陆框弹出来的时候,我们是可以进行拖动的.这就是一个拖拽效果 这是我在慕课网上面看到的,我直接拿过来了,地址http://www.imooc.com/learn/60 这个视频讲的蛮好的,一清二楚,不懂的可以去看看. 首先,理清楚一下总体的思路. 第一步:当鼠标按下弹出框某个区域的时候,可以进行拖拽 第二步:弹出框拖拽进行中 第三部:鼠标松开,弹出框拖动到了某个位置. 先上源代码.这个是慕课网的老师提供的 . <

简单的鼠标拖拽效果(原生js实现)

之前在聊天群里看到有人说面试的时候被问到了怎样实现一个拖拽效果,当时看到后在心里默默思考了下,结果发现好像我也写不出来啊.本着遇到一个解决一个的思想,就亲自敲了一个,看到张鑫旭大神写的代码,真的很厉害,多多学习了,(感觉随便搜一个关于前端方面的问题都能看到他的网站,真是太佩服了,写了那么多文章,十分感谢.)好了,接下来就进入正题了.想实现一个效果首先得明白其中的逻辑,知道了实现逻辑后,就可以码代码了.首先我实现的效果是: 鼠标按下后,才可以执行后续效果 鼠标已经按下,然后鼠标移动,需要拖拽的元素

js 鼠标拖拽效果实现

效果: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>速表拖拽效果实现</title> <style> *{ margin: 0; padding: 0; } .toolbar{ height: 30px; text-align: left; padding-left: 20px;

js拖拽效果实现

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head>    <meta

React.js实现原生js拖拽效果及思考

一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖拽效果. 首先,其实拖拽效果的思路是很简单的.主要就是三个步骤: 1.onmousedown的时候,启动可拖拽事件,记录被拖拽元素的原始坐标参数. 2.onmousemove的时候,实时记录鼠标移动的距离,结合被拖拽元素第一阶段的坐标参数,计算并设置新的坐标值. 3.onmouseup的时候,关闭可拖拽事件

js之拖拽效果

主要原理: 1.当鼠标按下时,记录鼠标坐标,用到的是 onmousedown: 2.当鼠标移动时,计算鼠标移动的坐标之差,用到的是 onmousemove: 3.当鼠标松开时,清除事件,用到的是 onmouseup: 了解的知识: 1.div 的 offsetLeft 与 style.left 的区别: http://longxu1314.blog.163.com/blog/static/2112990412013101814844444/ 效果图如下: 突然发现有没有效果图都一样哈哈,不说废话

原生js实现拖拽效果

css样式布局: html部分: js主体部分: 接下来用混合继承实现box2移动时有边界的效果: 思路:1.实现拖拽效果主要有三个事件,当鼠标按下的时候,获取鼠标相对于事件发生元素的位置(offsetX/offsetY);当鼠标移动的时候,利用鼠标指针相对于浏览器页面(或客户区)的坐标(clientX/clientY),得到元素的left和top值(clientX/clientY-offsetX/offsetY):当鼠标抬起的时候清除移动效果. 2.事件处理函数会使this指向触发事件的元素,