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 相关文章推荐
js和jquery中获取非行间样式
May 05 jQuery
jquery请求servlet实现ajax异步请求的示例
Jun 03 jQuery
详谈表单格式化插件jquery.serializeJSON
Jun 23 jQuery
jQuery层级选择器_动力节点节点Java学院整理
Jul 04 jQuery
详解在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css
Nov 08 jQuery
jQuery EasyUI 折叠面板accordion的使用实例(分享)
Dec 25 jQuery
jquery 获取索引值在一定范围的列表方法
Jan 25 jQuery
jQuery中ajax请求后台返回json数据并渲染HTML的方法
Aug 08 jQuery
jQuery实现合并表格单元格中相同行操作示例
Jan 28 jQuery
jquery 键盘事件 keypress() keydown() keyup()用法总结
Oct 23 jQuery
jquery实现弹窗(系统提示框)效果
Dec 10 jQuery
如何使用jQuery操作Cookies方法解析
Sep 08 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
phpmyadmin 访问被拒绝的真实原因
2009/06/15 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
jQuery对象的length属性用法实例
2014/12/27 Javascript
javascript实现获取字符串hash值
2015/05/10 Javascript
JavaScript创建闭包的两种方式的优劣与区别分析
2015/06/22 Javascript
javascript实现起伏的水波背景效果
2016/05/16 Javascript
微信小程序 Button 组件详解及简单实例
2017/01/10 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
小程序页面动态配置实现方法
2019/02/05 Javascript
jQuery中each和js中forEach的区别分析
2019/02/27 jQuery
vue实现折线图 可按时间查询
2020/08/21 Javascript
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python内置数据结构与操作符的练习题集锦
2016/07/01 Python
python pytest进阶之fixture详解
2019/06/27 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
使用python制作一个解压缩软件
2019/11/13 Python
python paramiko远程服务器终端操作过程解析
2019/12/14 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
2019/12/18 Python
python numpy数组复制使用实例解析
2020/01/10 Python
ansible动态Inventory主机清单配置遇到的坑
2020/01/19 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
英国第一摩托车和摩托车越野配件商店:GhostBikes
2019/03/10 全球购物
巴西手表购物网站:eclock
2019/03/19 全球购物
季度思想汇报
2014/01/01 职场文书
优秀实习生感言
2014/03/01 职场文书
会计岗位说明书
2014/07/29 职场文书
七夕活动策划方案
2014/08/16 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
nginx作grpc的反向代理踩坑总结
2021/07/07 Servers
python神经网络学习 使用Keras进行简单分类
2022/05/04 Python