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插件FusionWidgets实现的AngularGauge图效果示例【附demo源码】
Mar 23 jQuery
jquery将标签元素的高设为屏幕的百分比
Apr 19 jQuery
jquery学习笔记之无new构建详解
Dec 07 jQuery
jQuery+koa2实现简单的Ajax请求的示例
Mar 06 jQuery
JS/jQuery实现简单的开关灯效果【案例】
Feb 19 jQuery
Vue项目中使用jquery的简单方法
May 16 jQuery
使用JQuery自动完成插件Auto Complete详解
Jun 18 jQuery
jquery实现垂直无限轮播的方法分析
Jul 16 jQuery
jQuery实现弹出层效果
Dec 10 jQuery
jQuery 动画与停止动画效果实例详解
May 19 jQuery
基于JQuery和DWR实现异步数据传递
Oct 16 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 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
2006/10/09 PHP
php的控制语句
2006/10/09 PHP
php checkbox复选框值的获取与checkbox默认值输出方法
2010/05/15 PHP
PHP操作数组的一些函数整理介绍
2011/07/17 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
2015/01/04 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
JQuery 解析多维的Json数据格式
2009/11/02 Javascript
ASP Json Parser修正版
2009/12/06 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
React.js入门学习第一篇
2016/03/30 Javascript
jquery插件autocomplete用法示例
2016/07/01 Javascript
妙用Bootstrap的 popover插件实现校验表单提示功能
2016/08/29 Javascript
详解Node项目部署到云服务器上
2017/07/12 Javascript
JS+HTML5 FileReader实现文件上传前本地预览功能
2020/03/27 Javascript
详解A标签中href=&quot;&quot;的几种用法
2017/08/20 Javascript
微信小程序的日期选择器的实例详解
2017/09/29 Javascript
详解在React中跨组件分发状态的三种方法
2018/08/09 Javascript
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
vue 进阶之实现父子组件间的传值
2019/04/26 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
2019/06/03 Javascript
解决vue组件props传值对象获取不到的问题
2019/06/06 Javascript
node实现爬虫的几种简易方式
2019/08/22 Javascript
详解使用mocha对webpack打包的项目进行&quot;冒烟测试&quot;的大致流程
2020/04/27 Javascript
Python 统计字数的思路详解
2018/05/08 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
解决python-docx打包之后找不到default.docx的问题
2020/02/13 Python
python中xlrd模块的使用详解
2021/02/01 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
Unix/Linux开发面试题
2016/08/16 面试题
交通安全寄语大全
2014/04/08 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
2019年浪漫婚礼证婚词
2019/06/27 职场文书
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python
Python提取PDF指定内容并生成新文件
2021/06/09 Python
详解Flutter自定义应用程序内键盘的实现方法
2022/06/14 Java/Android