jquery实现拖拽小方块效果


Posted in jQuery onDecember 10, 2020

今天来讲一个很常用的拖拽功能,主要是利用一点css,js和jquery,很简单但同时也很重要,掌握好才是最关键的!

下面来看下效果图:

这里可以看到,在鼠标hover的时候会有一个透明度的变化和一个盒子阴影!并且在右下角会实时的显示出小方块移动时横纵坐标的变化!

jquery实现拖拽小方块效果

可以看到有一个盒子阴影

jquery实现拖拽小方块效果

在鼠标单击按住的时候会变红,然后可以拖动小块随意移动

jquery实现拖拽小方块效果

我们在看代码之前可以先了解下jquery中的基本知识(选择器,css控制器什么的)和offset()clientX,clientY。思路很简单,就是分别监听鼠标的 mousedown,mouseup,mousemove这三个事件,通过判断div移动之前的坐标,div移动之后的坐标(offset获得)和鼠标移动前后的坐标(clientX和clientY获得)判断div在body里的具体坐标位置,然后设置div在body里左边和上边的距离(left,top)。代码思路在代码里很详细!希望大家好好理解!

附上代码:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>拖动图片</title>
  <style>
    html {
      height: 100%;
    }
    
    body {
      margin: 0px;
      padding: 0rem;
      border: 0rem;
      height: 100%;
      width: 100%;
      position: relative;
      /* 取消默认的输入事件,不然会一直出现‘I'一样的光标 */
      -webkit-user-select: none;
      -moz-user-select: none;
      -ms-user-select: none;
      user-select: none;
    }
    
    #drag {
      height: 200px;
      width: 200px;
      background: teal;
      border: none;
      border-radius: 1rem;
      /* 一定要是absolute */
      position: absolute;
      opacity: 0.8;
    }
    
    #drag:hover {
      box-shadow: 0 8px 12px 0 rgba(16, 49, 231, 0.4);
      opacity: 1;
      cursor: pointer;
    }
    
    input {
      width: 12rem;
      height: 2rem;
      font-size: 1.5rem;
      border: 2px solid #aaa;
    }
    
    #input1 {
      display: block;
      position: absolute;
      bottom: 1.2rem;
      right: 1rem;
    }
    
    #input2 {
      display: block;
      position: absolute;
      bottom: 1.2rem;
      right: 16rem;
    }
  </style>
</head>

<body>

  <div id="drag">

  </div>
  <input type="text" id="input1" name="y" placeholder="y轴的坐标为">
  <input type="text" id="input2" name="x" placeholder="x轴的坐标为">

  <!-- 引入内部jquery,大家使用可以引入CDN -->
  <script src="jquery-3.5.1.min.js"></script>
  <script>
    var client_x = 0;
    var client_y = 0;
    var offset_x = 0;
    var offset_y = 0;
    var moving = false;
    // 利用jquery获得div这个元素
    var drag = $('#drag');
    // 添加监听事件
    drag.on({
      // 鼠标抬起事件
      mouseup: function(e) {
        moving = false;
        // 为div添加一个css样式
        $("#drag").css("background", 'teal');
      },
      // 鼠标按下事件
      mousedown: function(e) {
        moving = true;
        // this代表的是 div
        var offset = $(this).offset();
        // offset() 方法设置或返回被选元素相对于文档的偏移坐标
        offset_x = offset.left;
        offset_y = offset.top;
        // clientX 事件属性返回当事件被触发时鼠标指针相对于浏览器页面的水平坐标
        client_x = e.clientX;
        // clientX 事件属性返回当事件被触发时鼠标指针相对于浏览器页面的垂直坐标
        client_y = e.clientY;
        drag.css("background", 'rgb(179, 43, 19)');
      },
      // 鼠标移动事件
      mousemove: function(e) {
        if (moving) {
          // 为div添加一个css样式
          drag.css({
            left: offset_x + (e.clientX - client_x),
            top: offset_y + (e.clientY - client_y)
          });
          // 设置并显示input标签内x,y轴的坐标
          $(':input[name="x"]').val(offset_x + (e.clientX - client_x));
          $(':input[name="y"]').val(offset_y + (e.clientY - client_y));
          drag.css("cursor", "pointer");
        }
      }
    });
  </script>
</body>

</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
jQuery Easyui Treegrid实现显示checkbox功能
Aug 08 jQuery
基于jQuery的表单填充实例
Aug 22 jQuery
jQuery UI 实例讲解 - 日期选择器(Datepicker)
Sep 18 jQuery
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
Dec 24 jQuery
jQuery中复合选择器简单用法示例
Mar 31 jQuery
jQuery实现的滑块滑动导航效果示例
Jun 04 jQuery
jQuery实现table表格信息的展开和缩小功能示例
Jul 21 jQuery
jQuery实现的点击图片居中放大缩小功能示例
Jan 16 jQuery
jQuery AJAX与jQuery事件的分析讲解
Feb 18 jQuery
JQuery 实现文件下载的常用方法分析
Oct 29 jQuery
JQuery通过键盘控制键盘按下与松开触发事件
Aug 07 jQuery
JS+JQuery实现无缝连接轮播图
Dec 30 jQuery
jQuery实现简单弹幕制作
Dec 10 #jQuery
JQuery绑定事件四种实现方法解析
Dec 02 #jQuery
jquery实现拖拽添加元素功能
Dec 01 #jQuery
jQuery实现可以扩展的日历
Dec 01 #jQuery
jQuery实现容器间的元素拖拽功能
Dec 01 #jQuery
jQuery实现查看图片功能
Dec 01 #jQuery
基于jQuery拖拽事件的封装
Nov 29 #jQuery
You might like
改造一台复古桌面收音机
2021/03/02 无线电
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
2009/07/01 PHP
php数组添加元素方法小结
2014/12/20 PHP
PHP实现连接设备、通讯和发送命令的方法
2015/10/13 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
深入理解JavaScript系列(6) 强大的原型和原型链
2012/01/15 Javascript
jQuery中click事件用法实例
2014/12/26 Javascript
JavaScript数组迭代器实例分析
2015/06/09 Javascript
JS更改select内option属性的方法
2015/10/14 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
jquery实现页面常用的返回顶部效果
2016/03/04 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
浅析JavaScript中的array数组类型系统
2016/07/18 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
js实现背景图自适应窗口大小
2017/01/10 Javascript
vue-router 中router-view不能渲染的解决方法
2017/05/23 Javascript
在vue中通过axios异步使用echarts的方法
2018/01/13 Javascript
vue实现word,pdf文件的导出功能
2018/07/31 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
[01:14:41]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第一场 1月8日
2021/03/11 DOTA
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
微信跳一跳python辅助脚本(总结)
2018/01/11 Python
python 接口实现 供第三方调用的例子
2019/08/13 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
关于django 1.10 CSRF验证失败的解决方法
2019/08/31 Python
Python用dilb提取照片上人脸的示例
2020/10/26 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
Koral官方网站:女性时尚运动服
2019/04/10 全球购物
Mansur Gavriel官网:纽约市的一个设计品牌
2019/05/02 全球购物
党日活动总结
2014/05/07 职场文书
2014年科研工作总结
2014/12/03 职场文书
2016年情人节问候语
2015/11/11 职场文书
怎样写工作总结啊!
2019/06/18 职场文书
25张裸眼3D图片,带你重温童年的记忆,感受3D的魅力
2022/02/06 杂记