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中each循环的简单回滚操作
May 05 jQuery
jquery平滑滚动到顶部插件使用详解
May 08 jQuery
运用jQuery写的验证表单(实例讲解)
Jul 06 jQuery
jQuery实现html双向绑定功能示例
Oct 09 jQuery
javaScript和jQuery自动加载简单代码实现方法
Nov 24 jQuery
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
Jan 25 jQuery
利用jquery和BootStrap实现动态滚动条效果
Dec 03 jQuery
jQuery+css last-child实现选择最后一个子元素操作示例
Dec 10 jQuery
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
Jun 06 jQuery
jQuery+ajax实现批量删除功能完整示例
Jun 06 jQuery
JQuery基于FormData异步提交数据文件
Sep 01 jQuery
jquery插件实现代码雨特效
Apr 24 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
php下关于中英数字混排的字符串分割问题
2010/04/06 PHP
新手菜鸟必读:session与cookie的区别
2013/08/22 PHP
浅谈PHP调用Webservice思路及源码分享
2014/06/04 PHP
微信access_token的获取开发示例
2015/04/16 PHP
yii2多图上传组件的使用教程
2018/05/10 PHP
checkbox 多选框 联动实现代码
2008/10/22 Javascript
基于jquery.Jcrop的头像编辑器
2010/03/01 Javascript
Jquery拖拽并简单保存的实现代码
2010/11/28 Javascript
jQuery .tmpl(), .template()学习资料小结
2011/07/18 Javascript
js用Date对象处理时间实现思路及代码
2013/01/31 Javascript
jQuery实用基础超详细介绍
2013/04/11 Javascript
jQuery Migrate 1.1.0 Released 注意事项
2014/06/14 Javascript
与Math.pow 相反的函数使用介绍
2014/08/04 Javascript
jQuery中delegate()方法用法实例
2015/01/19 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
Extjs表单输入框异步校验的插件实现方法
2017/03/20 Javascript
ES6中参数的默认值语法介绍
2017/05/03 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
基于Vue CSR的微前端实现方案实践
2020/05/27 Javascript
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
使用Python中的greenlet包实现并发编程的入门教程
2015/04/16 Python
python使用urllib2提交http post请求的方法
2015/05/26 Python
Python二叉搜索树与双向链表转换算法示例
2019/03/02 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
Python类中self参数用法详解
2020/02/13 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
利用css3-animation实现逐帧动画效果
2016/03/10 HTML / CSS
安全员岗位职责
2013/11/11 职场文书
揭牌仪式主持词
2014/03/19 职场文书
企业宣传策划方案
2014/05/29 职场文书
女方家长婚礼致辞
2015/07/27 职场文书
干货:如何写好工作计划!
2019/05/17 职场文书
【海涛dota】偶遇拉娜娅 质量局德鲁伊第一视角解说
2022/04/01 DOTA