javascript鼠标拉框(框选)的实现

JavaScript实现鼠标框选操作 当鼠标按下时,我们记录下鼠标的位置,并创建一个框选的矩形元素。最后,当鼠标释放时,我们结束框选操作并获取被框选的元素。事件,当鼠标按下时,记录下鼠标的位置,并设置框选矩形的初始位置为鼠标按下时的位置。事件,当鼠标移动时,根据鼠标的位置和起始位置计算框选矩形的宽度和高度,并设置框选矩形的大小和位置。首先,我们获取可选择区域的元素,并给它添加了一个ID,以便后续在JavaScript中引用。然后打印被框选的元素,并移除框选矩形。方法获取框选矩形和元素的边界信息,并通过比较它们的位置关系来判断元素是否被框选。 阅读详情

这个功能,我花了好几天的时间才实现,主要是在拉框的时候,我可以实现,但是,我想在松开鼠标的时候,进行自己的业务处理,但是,怎么也不能响应鼠标的mouseup事件,也看了不少的例子,都是只有拉框,在移动事件里面可以实现功能,但是,鼠标的抬起事件不能响应。有的,可以相应事件,但是要鼠标在多点一下,后来就找了好多的资料,了解了事件的处理,才把这个问题搞定。
现在把代码重新整理了一下,希望对大家能有所帮助。

<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=gbk">
        <title>拉框</title>
    </head>
    <body>
        <div id='lay1'
            onmousedown='down(event)'
            onmouseup='up(event)'
            onmousemove='move(event)'
            style='top:30px;left:30px;width:400px;height:400px;visibility:visible;border:solid 1px blue;'
        >            
            <div id='rect'
                style='position:absolute;background-color: #FF99FF'            
            >            
        </div>    
    </div>
        <script language="javascript">
            
            // 是否需要(允许)处理鼠标的移动事件,默认识不处理
            var select = false;
            
            var rect = document.getElementById("rect");
            // 设置默认值,目的是隐藏图层
            rect.style.width = 0;
            rect.style.height = 0;
            rect.style.visibility = 'hidden';
            //让你要画的图层位于最上层
            rect.style.zIndex = 1000;
            
            // 记录鼠标按下时的坐标
            var downX = 0;
            var downY = 0;
            // 记录鼠标抬起时候的坐标
            var mouseX2=downX;
            var mouseY2=downY;
            
            //处理鼠标按下事件
            function down(event){
                // 鼠标按下时才允许处理鼠标的移动事件
                select = true;
                //让你要画框的那个图层显示出来
                //rect.style.visibility = 'visible';
                // 取得鼠标按下时的坐标位置
                downX = event.clientX;
                downY = event.clientY;
                
                //设置你要画的矩形框的起点位置
                rect.style.left = downX;
                rect.style.top = downY;
            }
            
            //鼠标抬起事件
            function up(event){
                //鼠标抬起,就不允许在处理鼠标移动事件
                select = false;
                //隐藏图层
                rect.style.visibility = 'hidden';
            }
            
            //鼠标移动事件,最主要的事件
            function move(event){
                
                // 取得鼠标移动时的坐标位置
                mouseX2 = event.clientX;
                mouseY2 = event.clientY;
                
                // 设置拉框的大小    
                rect.style.width = Math.abs( mouseX2 - downX );
                rect.style.height = Math.abs( mouseY2 - downY );    
                
                /*
                
                这个部分,根据你鼠标按下的位置,和你拉框时鼠标松开的位置关系,可以把区域分为四个部分,根据四个部分的不同,
                我们可以分别来画框,否则的话,就只能向一个方向画框,也就是点的右下方画框.
                
                */
                if(select){
                    
                   rect.style.visibility = 'visible';
   
                    // A part
                    if( mouseX2 < downX && mouseY2 < downY ){
                        rect.style.left = mouseX2;
                        rect.style.top = mouseY2 ;    
                    }
                    
                    // B part
                    if( mouseX2 > downX && mouseY2 < downY){
                        rect.style.left = downX ;
                        rect.style.top = mouseY2;    
                    }
                    
                    // C part
                    if( mouseX2 < downX && mouseY2 > downY){
                        rect.style.left = mouseX2;
                        rect.style.top = downY ;    
                    }
                    
                    // D part
                    if( mouseX2 > downX && mouseY2 > downY ){
                        rect.style.left = downX ;
                        rect.style.top = downY;
                    }            
            
                }
                /*
                    这两句代码是最重要的时候,没有这两句代码,你的拉框,就只能拉框,在鼠标松开的时候,
                    拉框停止,但是不能相应鼠标的mouseup事件.那么你想做的处理就不能进行.
                    这两句的作用是使当前的鼠标事件不在冒泡,也就是说,不向其父窗口传递,所以才可以相应鼠标抬起事件,
                    这个部分我也理解的不是特别的清楚,如果你需要的话,你可以查资料.但是这两句话确实最核心的部分,
                    为了这两句话,为了实现鼠标拉框,我搞了几天的时间.
                */
          window.event.cancelBubble = true;
          window.event.returnValue = false;    

                
                function getDivOffsetLeft(){
                    var lay1 = document.getElementById("lay1");
                    //var rect = document.getElementById("rect");
                    return lay1.offsetLeft;
                }
                function getDivOffsetTop(){
                    var lay1 = document.getElementById("lay1");
                    //var rect = document.getElementById("rect");
                    return lay1.offsetTop;
                }
            
            }
            
            
            
        </script>

    </body>

</html>

JavaScript实现原生鼠标拖拽方框选中功能 通过本章节的介绍,我们了解了鼠标拖拽操作的实现原理,包括使用mousedownmousemove和mouseup事件来捕捉用户的拖拽动作,并根据这些动作动态更新目标元素的位置和大小。我们还学会了如何在拖拽过程中绘制和更新覆盖层以显示选区方框,并在拖拽结束时进行相关处理。下一章节将探讨如何在用户界面上绘制选中的方框区域,并优化绘制性能。在本章中,我们深入探讨了如何通过JavaScript实现鼠标事件处理中的边界限制和目标元素检查。 阅读详情

相关推荐

JavaScript鼠标框选删除交互功能实现

在现代Web应用中,鼠标框选并删除功能已成为提升用户交互效率的重要手段,广泛应用于文件管理、图形编辑、数据操作等场景。本章将带你了解该功能的核心机制:用户通过鼠标拖动绘制选区,系统识别选区内元素,并支持一键删除操作。我们将从功能意义出发,探讨其在提升用户体验与前端交互设计中的价值,为后续章节的实现与优化打下坚实基础。通过本章的学习,我们已经掌握了鼠标事件的基本原理与监听方式,并实现了鼠标框选功能的初步交互。这些知识为我们后续实现框选区域的计算与元素选中判断奠定了坚实基础。

weixin_32445049的博客 902

js鼠标框选元素

js实现框选多个元素的实用方法

weixin_54754781的博客 1153

jquery实现鼠标拖拽选择

jquery实现鼠标拖拽,完整实现左右拖拽并且选择功能,如果感觉实用,请评论.谢谢!

js实现鼠标拖拽多选功能

最近做了一个用js实现鼠标拖拽多选的功能,于是整理了一下思路,写了一个小demo:遮罩出现:被遮罩盖住的,即为选中的块(背景色为粉色)下面是具体代码,注释已在文中,与大家交流。 <!DOCTYPE html> <html> <head> <title>鼠标拖拽多选功能</tit...

weixin_33953384的博客 3095

鼠标框选效果

鼠标框选效果的框选代码,很精简,可以画出js 的选框,模范windows的效果

Javascript实现鼠标框选操作 不是点击选取

主要介绍了Javascript实现鼠标框选操作,不是点击选取,利用鼠标进行框选,感兴趣的小伙伴们可以参考一下

前端js、javascript 鼠标 框选 文件 功能

【代码】前端js、javascript 鼠标 框选 文件 功能。

q515656712的博客 1057

JS实现鼠标框选效果完整实例

主要介绍了JS实现鼠标框选效果,可实现鼠标点击出现框选效果的功能,同时下方实时显示框选大小,涉及javascript鼠标事件的响应与页面元素的动态运算技巧,需要的朋友可以参考下

【转】javascript鼠标拉框(框选)的实现

这个功能,我花了好几天的时间才实现,主要是在拉框的时候,我可以实现,但是,我想在松开鼠标的时候,进行自己的业务处理,但是,怎么也不能响应鼠标的mouseup事件,也看了不少的例子,都是只有拉框,在移动事件里面可以实现功能,但是,鼠标的抬起事件不能响应。有的,可以相应事件,但是要鼠标在多点一下,后来就找了好多的资料,了解了事件的处理,才把这个问题搞定。现在把代码重新整理了一下,希望对大家能...

weixin_30657541的博客 355

用javascript实现鼠标框选

用javascript实现鼠标框选

告别黑盒调试:用MMSegmentation可视化工具链,从训练到评估一目了然

本文介绍了如何利用MMSegmentation的可视化工具链,从训练到评估实现语义分割模型的透明化调试。通过整合日志分析、混淆矩阵、PR曲线等工具,开发者可以快速定位模型问题,优化性能。文章详细展示了训练曲线分析、性能剖析、混淆矩阵解读和PR曲线应用等关键步骤,帮助用户告别黑盒调试,提升模型开发效率。

weixin_29100927的博客 104

识别图片中的文字(ocr)

记录一次实现图像识别的功能,利用ocr实现对图片中的文字提取的功能

weixin_50735831的博客 2171

Unity事件总线第一篇:为什么你的游戏需要一个事件总线?

本文探讨了游戏开发中常见的跨模块调用导致代码强耦合的问题。通过一个攻击按钮触发角色攻击、怪物掉血和血条更新的案例,分析了直接调用方式带来的维护困难、扩展性差和模块重用性低等弊端。文章提出使用事件总线(Event Bus)作为解决方案,通过发布-订阅模式实现模块解耦。重构后的代码中,各模块只需与事件总线交互,彼此不再直接依赖。这种设计使得新增功能(如音效)无需修改现有代码,大大提高了系统的可维护性和扩展性,同时增强了模块的重用性,完美体现了开闭原则。

qq_46348216的博客 1298

html5实现鼠标框选,使用原生js编写一个简单的框选功能方法

今天我们来聊一下怎么使用原生javascript编写一个简单的框选功能。需求描述鼠标左键按下不放,移动鼠标出现矩形选框;鼠标左键松开,根据上边出现的矩形选框统计选框范围内的DOM元素;嗯...上边的功能描述看着是挺简单的,但实现起来也还是会有些地方需要斟酌思考的。比如,如果我们的框选范围不是document.body,而是某一个div里边进行框选呢?而现实开发过程中,我们会遇上的应该就是第二种情况...

weixin_29369363的博客 3633

基于Zemax的干涉仪仿真——Fizeau球面干涉仪

最近在用Zemax仿真干涉仪,在这之前查资料都是关于一些平面干涉仪的仿真,很少有关于Fizeau型的,尤其是球面干涉仪的仿真,看到很多关于这方面的问题回复都说利用多重结构仿照Zemax马赫-泽德干涉仪去做,但是也没有具体的过程,因此在这里分享一下我仿真的干涉仪步骤方法,具体是利用多重结构完成的仿真。

weixin_46657737的博客 6408

8.5华为OD机试真题 新系统 - IPv4 等长子网划分与自动分配系统 (Java/Py/C/C++/Js/Go)

8.5华为OD机试真题 新系统 - IPv4 等长子网划分与自动分配系统 (Java/Py/C/C++/Js/Go)

算法大师! 525

Mapbox-GL 拉框缩放自定义功能(不用按shift+鼠标左键进行框选缩放)

一、找到mapbox-gl 拉框选择源码文件名称:src\ui\handler\box_zoom.js 二、为地图做主动触发拉框缩放事件 // 初始化地图时将拉框禁用 boxZoom: false new mapboxgl.Map({ container: self.$refs.AppMap, style: style, center: [0, 0], zoom: 1, .

weixin_39392030的博客 2879

书旗app字符串加密分析

本文案例是对书旗app搜索接口的请求密文进行分析和逆向。

李玺 3156

vue 鼠标移动框选和按住CTRL选

vue类似与window上多选文件css代码js代码 前言:因为这是个文件管理系统,替代用户原来的ftp系统。 用户在原来的系统里面习惯的的操作要在新系统中体现,特别是鼠标框选之类的操作。 效果图: 第一个是框选效果,第二个是按住CTRL后鼠标左键选择的效果。 代码是纯js写的,ps:主要是没找到合适的vue框选效果 html代码: 一定要看好层级关系 第一个红框中右两个事件,mouseup鼠标抬起事件,mousedown.left是鼠标左键点击事件 第二个红框中的style必须设置,这个div是与框选

weixin_45150521的博客 4765

Oracle EBS PAC定期成本分配处理程序请求报错:30011一个无效帐户与正在处理的物料关联

Oracle EBS版本: RDBMS : 12.1.0.2.0 Oracle Applications : 12.2.6 前提条件: 1、启用“MRP:调试模型”配置文件 月结会计反映执行《定期成本分配处理程序》请求报错: 中文:30011一个无效帐户与正在处理的物料关联。: CSTPALPC.create_dist_entry : 40 英文:30011An invalid account is associated with the item being transacted.:...

陈显平的专栏-Oracle EBS 1085

工业级向量检索核心技术:IVF-PQ原理与全流程解析

在大规模高维向量检索场景中,IVF-PQ(倒排索引结合乘积量化)凭借“粗筛范围+细算距离”的双重加速策略,成为核心解决方案。本文将深入解析其原理与全流程,助力开发者掌握这一关键技术。

进一步有进一步的欢喜~ 1197

利用鼠标框选checkbox-JS实现

这是一篇关于我怎样花了四个小时并借鉴前人代码链接地址才完成的一个用鼠标框选checkbox的一篇文章。 这是某厂在我投递简历后要我先完成并放在github上给它看的效果图。 先来说下要完成这张所需要的功能: 鼠标按下后,选中的内容中所有复选框(checkbox)都需为“checked”; 鼠标点击其他位置后之前选中的内容都归原,也即初始化。 需求讲完了,那就直接上代码吧。 <!DOCTYPE html> <html lang="en"> <head> &lt

weixin_49172439的博客 1138

YOLOv8性能突破:DySample超轻量动态上采样算子的创新应用与实现【附保姆级代码】

YOLOv8(You Only Look Once Version 8)作为YOLO系列模型的最新版本,延续了高效、准确的目标检测优势。其基础结构包含了骨干网络(Backbone)、检测头(Head)、以及特征融合层(Neck)。在特征融合阶段,YOLOv8需要对不同尺度的特征图进行上采样,以便将低分辨率的特征与高分辨率的特征进行融合。传统的上采样操作多使用插值(如双线性插值)或固定卷积,而这些方法可能无法很好地适应复杂的上下文信息。

一键难忘的博客 3120

html5实现鼠标框选,JS实现鼠标框选效果完整实例

本文实例讲述了JS实现鼠标框选效果的方法。分享给大家供大家参考,具体如下:/p>"http://www.w3.org/TR/html4/strict.dtd">鼠标框选效果*{padding:0;margin:0;}#bottom{position:absolute;bottom:0px;width:100%;height:40px;border:1px solid #000;back...

weixin_30075185的博客 1322

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

前端——框选技术的实现

var selList = []; window.onload = function() { //定义鼠标框选的区域 var canvas = document.getElementById('teminal-area'); var selDiv; var isSelect = false; var evt; //鼠标点击时候的坐标 var startX; va...

前方一片光明 8193

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

上一篇: Server操作Mxd文件详细讲解
下一篇: C#winform中如何通过点击按钮切换窗口
evilmojo
博客等级 码龄18年 16粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值