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+ThinkPHP+Ajax实现即时消息提醒功能实例代码
Mar 21 jQuery
jQuery+pjax简单示例汇总
Apr 21 jQuery
使用jQuery ajaxupload插件实现无刷新上传文件
Apr 23 jQuery
jQuery EasyUI tree增加搜索功能的实现方法
Apr 27 jQuery
jQuery Jsonp跨域模拟搜索引擎
Jun 17 jQuery
基于jQuery实现的单行公告活动轮播效果
Aug 23 jQuery
基于jQuery的左滑出现删除按钮的示例
Aug 29 jQuery
JS+jQuery实现注册信息的验证功能
Sep 26 jQuery
jQuery中 DOM节点操作方法大全
Oct 12 jQuery
webpack写jquery插件的环境配置
Dec 21 jQuery
jQuery实现input[type=file]多图预览上传删除等功能
Aug 02 jQuery
jquery实现简单拖拽效果
Jul 20 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/03/09 PHP
PHP实现的博客欢迎提示功能(很特别哦)
2014/06/05 PHP
PHP CodeIgniter框架的工作原理研究
2015/03/30 PHP
php获取汉字拼音首字母的方法
2015/10/21 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
JavaScript判断两种格式的输入日期的正确性的代码
2007/03/25 Javascript
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
javascript操作excel生成报表示例
2014/05/08 Javascript
JavaScript中的console.trace()函数介绍
2014/12/29 Javascript
jquery中show()、hide()和toggle()用法实例
2015/01/15 Javascript
JQuery中serialize()用法实例分析
2015/02/06 Javascript
jQuery实现元素拖拽并cookie保存顺序的方法
2016/02/20 Javascript
js获取当前日期时间及其它日期操作汇总
2016/03/08 Javascript
浅谈js中的三种继承方式及其优缺点
2016/08/10 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
JavaScript中setTimeout的那些事儿
2016/11/14 Javascript
Bootstrap popover用法详解
2016/12/22 Javascript
微信小程序 video详解及简单实例
2017/01/16 Javascript
vue.js 上传图片实例代码
2017/06/22 Javascript
基于Vue实现页面切换左右滑动效果
2020/06/29 Javascript
详解vue后台系统登录态管理
2019/04/02 Javascript
微信端调取相册和摄像头功能,实现图片上传,并上传到服务器
2019/05/16 Javascript
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
Vue Elenent实现表格相同数据列合并
2020/11/30 Vue.js
详解python中字典的循环遍历的两种方式
2017/02/07 Python
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
Python常用的json标准库
2019/02/19 Python
PYTHON发送邮件YAGMAIL的简单实现解析
2019/10/28 Python
Python远程linux执行命令实现
2020/11/11 Python
HTML5边玩边学(1)画布实现方法
2010/09/21 HTML / CSS
html5教程实现Photoshop渐变色效果
2013/12/04 HTML / CSS
JBL英国官网:JBL UK
2018/07/04 全球购物
党员岗位承诺书
2014/03/25 职场文书
校园安全广播稿范文
2014/09/25 职场文书
2015年高三年级组工作总结
2015/07/21 职场文书