用鼠标事件实现拖拽

web前端实例:JS鼠标拖拽效果 JavaScript 鼠标拖拽效果是一种常见的交互技术,通过监听鼠标事件和操作元素的位置来实现用户拖拽元素的功能。 该技术的实现原理包括鼠标事件的监听、确定拖拽对象、跟随鼠标移动以及释放拖拽对象。具体实现中,需要考虑事件监听、元素定位、位置计算等技术要点,并注意边界控制、性能优化和兼容性问题。 触摸事件与鼠标事件相比,具有不同的触发方式、事件对象和适用性,更适用于移动设备和平板电脑等触摸屏设备。 阅读详情

首先复习一下鼠标事件:

click: 在用户单击主鼠标按钮,或者按下回车键时触发。
mousedown:用户按下任意鼠标按钮时触发,不能通过键盘触发;
mouseenter:在鼠标光标从元素外部首次移动到元素范围之内时触发。
mouseleave: 在鼠标光标移动到元素范围之外时触发
mousemove:当鼠标指针在元素内部移动时重复地触发,不能通过键盘事件触发这个事件;
mouseout:在鼠标指针位于元素上方,然后用户将其移入另一个元素时触发。又移入地另一个元素可能位于前一个元素地外部,也可能是这个元素的子元素;
mouseover: 在鼠标指针位于一个元素外部时,然后将其首次移入到另一个元素边界之内时触发。
mouseup:在用户释放鼠标按钮时触发

只有在同一个元素上相继触发mousedown和mouseup事件时,才会触发click事件;


用mousedown和mouseup,mousemove事件实现拖拽

html结构:定义一个移动div

<div id="div1"></div>

简单写下样式:注意定位position

#div1{
            position: absolute;
            width: 200px;
            height: 200px;
            background: pink;
        }

js代码:

window.onload = function(){
        var moveBox = document.getElementById('div1');
        var windowH = window.innerHeight,
            windowW = window.innerWidth;
        // 当鼠标在moveBox里面按下时
        moveBox.onmousedown = function(event){
            event = event || window.event;
            var distanceX = event.clientX - this.offsetLeft,
                distanceY = event.clientY - this.offsetTop;
            // 当鼠标在document任意位置时,连续触发    
            document.onmousemove = function(event_2){
                event_2 = event_2 || window.event;
                var left = event_2.clientX - distanceX,
                    top = event_2.clientY - distanceY;
                if (left < 0) left = 0;
                if (top < 0) top = 0;
                if (left > windowW - moveBox.offsetWidth) left = windowW - moveBox.offsetWidth;
                if (top > windowH - moveBox.offsetHeight) top = windowH - moveBox.offsetHeight;
                moveBox.style.left = left + 'px';
                moveBox.style.top = top + 'px'
            // 当鼠标离开时,移除鼠标移动事件;
            document.onmouseup = function(){
                document.onmousemove = null;
                document.onmouseup = null;
            }
        }
      }
    }
QT5 实现鼠标拖拽事件 先给最终效果:简单的来说就是重写了一下鼠标事件 阅读详情

相关推荐

实现Vue 电脑端 PC端 鼠标拖拽横向移动 & 鼠标事件mousedown mouseup mousemove和单击事件click冲突问题& 盒模型冲撞取消拖拽状态问题

<1>.已实现功能 1.PC端Vue项目(或html)实现鼠标左右拖拽盒子滑动 2.同一盒子上鼠标移入移出事件和单击事件click冲突问题 3.子盒子移动,如何让边界不超出父盒子边界? 注意: 本文主要涉及到PC端鼠标横向拖拽问题的解决,移动端的解决方案很多,请详见其他文章,不在这里赘述. <2>.代码及原理 需求描述:横向有一个菜单栏, 菜单tab过多,让他实现左右可以拖拽滑动 我们设置一个大盒子grand, 然后是父盒子parent和子盒子child. 其中gran

TVM的博客 5438

JS基础_拖拽(一)

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> #box1{ width: 100px; height: 100px; background-color: red; position: absolute; } .

兴趣是最好的老师 359

React通过原生鼠标事件实现拖拽(drag and drop)列表重排序

虽然现在html5已经有支持拖拽的事件,但是支持还不那么全面。所以目前大部分的拖拽还是通过原生的鼠标事件来实现列表重新排序。话不多说。一步步开始做吧 盆友们可以通过下面链接查看所有代码和效果。 https://codesandbox.io/s/drap-and-drop-to-reorder-list-iqwqj Step1.准备一个模拟数据 let list = []; for(let i = 0; i< 10; i++){ list.push(`item ${i}`); } Step2

莫小猪的菜鸟进阶路 3322

js基础 — 简单易懂,拖拽事件(二)

我们出发的角度,可以对鼠标或者盒子元素进行更改,但是鼠标是用户控制的,我们控制不了,所以只能控制盒子的位置,意味着我们要在用户按下鼠标时刻,修改盒子移动的距离。以上代码是在上篇文章《js基础 — 简单易懂,拖拽事件(一)》代码基础上做的调整(修改的小bug),小伙伴们可以上手体验一下,毕竟实践是检验真理的唯一标准嘛!clientX:当鼠标事件发生时(onclick,omousemove,onmouseover),鼠标相对于浏览器(浏览器的有效区域)x轴的位置;js 代码示例:(已解决版)

qq_53895518的博客 620

Qt实现鼠标拖拽事件

然后,我们创建了一个CustomWidget对象,即我们自定义的窗口,并显示它。鼠标拖拽是一种常见的用户交互操作,它允许用户通过按下鼠标左键并移动来拖动对象或改变窗口大小。如果是,我们记录下鼠标按下时的窗口位置和鼠标位置。这样,我们就能够在后续的鼠标移动事件中计算鼠标移动的偏移量。如果是,我们计算出鼠标移动的偏移量,并将窗口移动到新的位置。这样,当用户按住鼠标左键并移动时,窗口会跟随鼠标移动。通过以上的代码,我们已经成功实现了鼠标拖拽事件。当我们在窗口上按住鼠标左键并移动时,窗口会跟随鼠标移动。

CyberWizarDD的博客 625

对Palantir的本体论的理解

本体论Ontology是Palantir的整个技术架构的核心与基石,它远不止是一个数据模型,而是一个旨在对企业决策本身进行建模的“数字世界的操作系统”。

liuyukuan的专栏 1149

JavaScript基础(32)_拖拽、鼠标移动事件

JS拖拽、鼠标移动事件

no15870678621的博客 1529

STM32单片机远程升级

stm32远程升级

fang_yang_wa的博客 1万+

js基础 — 简单易懂,拖拽事件(一)

此时onmouseup事件绑定给box1,当你往下拖 box1 的时候 ,即box2在上box1在上方的时候,你的鼠标在box2上,触发的是box2的onmouseup。这时有人会说冒泡事件不行吗?所以事件不能给box1绑定了要给document绑定onmouseup事件!下面修改下代码:onmouseup事件不能给box1绑定,要给document绑定onmouseup事件!点击鼠标拖拽box1后:此时有个小bug , 你点击box1之后,box1盒子粘到鼠标上,丢不掉了!

qq_53895518的博客 1049

百度慧眼人口位置数据:从原理到实战的GIS处理全流程

本文详细解析百度慧眼人口位置数据的处理全流程,从基本原理到实战应用。通过空间网格划分、终端数量统计等技术手段,百度慧眼数据能准确反映人群分布特征。文章涵盖坐标系转换、核密度分析、热力图制作等GIS处理技巧,并分享商业选址、城市规划等典型业务场景的解决方案,帮助读者高效利用这一数据资源。

weixin_30872157的博客 534

喷雾破碎模型解析:从理论到CFD应用实践

本文深入解析喷雾破碎模型的理论基础与CFD应用实践,重点介绍KHRT、TAB和ETAB等主流模型的核心原理与工程调参技巧。通过OpenFOAM实例演示和参数优化建议,帮助工程师精准预测液滴破碎行为,提升燃烧效率与排放控制性能,适用于汽车发动机、燃气轮机等工业场景。

weixin_29281915的博客 499

html 鼠标拖拽事件,JavaScript鼠标拖拽事件实现的案例

这篇文章主要为大家详细介绍了使用javaScript实现鼠标拖拽事件的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下本文实例为大家分享了js实现鼠标拖拽事件的具体代码,供大家参考,具体内容如下body{margin: 0;padding: 0;}p{position: absolute;top: 200px;/*p的y轴*/left: 150px;/*p的x轴*/width: 300p...

weixin_39663933的博客 357

Bentley ORD(openroads designer) 二次开发(BIM)第七节 在ORD SDK中调用MicroStation SDK

从课程刚开始的时候我们就通过学习,了解了ORD的开发是基于MicroStation的,ORD SDK的接口发布的时候也对MicroStation SDK也做了一次发布。这一章将以我们对ORD SDK知识的了解为基础,使用ORD SDK的接口读取道路几何信息、计算桩号,然后再使用MicroStation SDK 读取地形数据和计算投影点的位置,并创建一组方柱形状的Soild。计算方柱底部坐标要经过两大步骤,通过路线的桩号及偏移距离去定位方柱的平面位置,通过方柱的平面位置计算数字地面模型上的投影点的坐标。

chen286990651的博客 881

彻底搞懂拖拽——基于鼠标事件的拖拽以及基于HTML5 API的拖拽完整实现

一、基于鼠标事件的拖拽 原理——onmousedown、onmousemove、onmouseup onmousedown 该事件会在鼠标按键被按下时触发 支持该事件的HTML标签: &amp;lt;a&amp;gt;, &amp;lt;address&amp;gt;, &amp;lt;area&amp;gt;, &amp;lt;b&amp;gt;, &amp;lt;bdo&amp;gt;, &amp;lt

从入门到进错门 4万+

r3live 使用前提 雷达-相机外参标定 livox_camera_lidar_calibration

港科大livox_camera_calib虽然操作方便,但是使用mid360雷达会有视角问题(投影三维点到相机),尝试了很多场景,标定效果都不理想(推荐场景是楼梯间),看来港大的更适合avia之类窄角度的雷达。如果标定效果不好的话,就使用 getExt2节点,getExt1节点只优化外参,而getExt2节点在计算的时候会将一开始计算的内参作为初值和外参一起优化。一般使用getExt1节点即可,如果在外参初值验证过,并且异常值已经剔除后,优化还是有较大的残差,那么可以使用getExt2试一试。

z1872385的博客 2399

机器学习实战5-天气预测系列:利用数据集可视化分析数据,并预测某个城市的天气情况

大家好,我是微学AI,最近天气真的是多变啊,忽冷忽热,今天再次给大家带来天气的话题,机器学习实战5-天气预测系列,我们将探讨一个城市的气象数据集,并利用机器学习来预测该城市的天气状况。该数据集包含年平均温度和湿度等信息。

微学AI的博客 1万+

使用鼠标事件来实现拖拽

其中涉及到的知识点 使用到的鼠标事件: mousedown:按下任意按钮是触发 mousemove:当鼠标指针在元素内部移动时重复触发 mouseup:释放鼠标按钮时触发 页面坐标位置: pageX;pageY 这两个属性表示鼠标光标在页面中的位置,因此坐标是从页面本身而非视口的左边和顶点计算的。 <div style="position:absolute; cursor:pointer; width: 100px; height:100px; background-color: red; l

weixin_46544600的博客 346

由JavaScript版迷宫游戏引出Java版迷宫地图生成器

Java案例:迷宫地图生成器 一、引入问题 本期18软件1班网页脚本实训项目是完成一个JavaScript版迷宫游戏。 迷宫地图是如何生成的呢?很简单,将一个正方形区域等分为若干行与若干列,比如25行25列,这样就有625个单元格,用一个二维数组map[25][25]就可以保存625个单元格信息,map[i][j] = 1表示该单元格要绘制砖,而map[i][j] = 0表示该单元格不绘制砖。 ...

howard2005的专栏 1473

实现简单的鼠标拖拽事件

实现简单的鼠标拖拽事件 实现原理:在获取鼠标点击后,实现鼠标的移动事件,和鼠标按键松开事件。 首先获取当前div的左边和上边距离鼠标位置的距离,分别即为disX,disY。然后在鼠标后,实现鼠标移动的事件中,赋值给div的style.left和style.top的值为当前鼠标的位置减去disX和disY后的值。 &lt;style type="text/css"&gt; *{...

秋天未成熟的博客 1353

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

jQuery实现鼠标拖拽事件

1、设置一个待拖动的元素,设置样式 <ul> <li>linux</li> <li>java</li> <li>javascript</li> </ul> *{ margin:0; padding:0; } ul{ list-style: none;

qq_40820235的博客 5999

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

鼠标拖拽事件实现

鼠标拖拽事件实现 <style> body{ margin: 0; padding: 0; } div{ position: absolute; top: 200px;/*div的y轴*/

AN_pianpian的博客 1042

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

使用js中常用的鼠标事件实现一个拖拽的例子

一、js中常用的几个必备鼠标事件 onclick: 元素上发生鼠标点击时触发. ondblclick: 元素上发生鼠标双击时触发. onmousedown: 当元素上按下鼠标按钮时触发. onmouseup: 当在元素上释放鼠标按钮时触发. onmouseout: 当鼠标指针移出元素时触发. onmousemove: 当鼠标指针移动到元素上时触发. onmouseover: 当鼠标指针移动到元素上时

kellywong的博客 1万+

使用ondrag 事件实现拖拽,以及自定义鼠标图片

使用ondrag 事件实现拖拽,以及自定义鼠标图片 效果如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <sty

D浩DzD的博客 1123

QT模拟鼠标事件,实现点击双击移动拖拽等

之前有涉及过一个远程桌面控制的项目,需要传一些指令给远程的电脑,实现简单的桌面点击、移动、拖拉等功能,当时没有时间实现得很好,今天又研究了一下,故此记录。 虽然我用的是QT,但核心涉及的还是系统的API,所以其他平台应该也是一样的。 废话不多说,直接上代码。 mouseacts.h: #ifndef MOUSEACTS_H #define MOUSEACTS_H #include <QWidget> #include "Windows.h"//这是引入Windows操作系统的API #in

Larry_Yanan的博客 9358

vue实现鼠标拖拽事件(并解决拖拽与点击事件的冲突问题)

html部分 <body> <div class="new-wrapper fullPage" ref="fullPage" id="app" v-cloak> <div class="returnTop" ref="returnTop" @click="returnTop" v-show="showReturnTop" @mousedown.stop="dragMove" > </div> </div> &l

qq_34458968的博客 8201

【亲测免费】 jQuery拖拽插件:实现鼠标和触摸事件的平滑拖拽

jQuery拖拽插件:实现鼠标和触摸事件的平滑拖拽 1. 项目基础介绍 本项目是一个开源的jQuery插件,旨在为Web开发者提供一个简单易用的拖拽功能。该插件无缝支持鼠标和触摸事件,使得开发者可以使用相同的代码在不同设备上实现拖拽操作。主要编程语言为JavaScript。 2. 项目核心功能 该插件的核心功能包括: 支持鼠标和触摸事件的拖拽操作。 提供灵活的配置选项,如是否创建源元素的克隆、拖...

gitblog_00404的博客 455
上一篇: js正则表达式
下一篇: javascript数组的使用总结
景洪在编程
博客等级 码龄9年 13粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值