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 禁止鼠标右键并监听右键事件
Apr 27 jQuery
jQuery异步提交表单实例
May 30 jQuery
简单谈谈require模块化jquery和angular的问题
Jun 23 jQuery
JS/jQuery实现DIV延时几秒后消失或显示的方法
Feb 12 jQuery
详解使用jQuery.i18n.properties实现js国际化
May 04 jQuery
jQuery常见的遍历DOM操作详解
Sep 05 jQuery
jQuery事件blur()方法的使用实例讲解
Mar 30 jQuery
jQuery分组选择器简单用法示例
Apr 04 jQuery
JS/jQuery实现超简单的Table表格添加,删除行功能示例
Jul 31 jQuery
jquery实现聊天机器人
Feb 08 jQuery
jquery简易手风琴插件的封装
Oct 13 jQuery
jquery实现穿梭框功能
Jan 19 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
天使彦史上最神还原,性别曝光的那一刻,百万网友恋爱了
2020/03/02 国漫
php下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
PHP的简易冒泡法代码分享
2012/08/28 PHP
PHP文件大小格式化函数合集
2014/03/10 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
javascript 在网页中的运用(asp.net)
2009/11/23 Javascript
javascript onmouseout 解决办法
2010/07/17 Javascript
mailto的使用技巧分享
2012/12/21 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
2014/01/26 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
jquery ajax局部加载方法详解(实现代码)
2016/05/12 Javascript
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
2018/04/03 Javascript
js 实现watch监听数据变化的代码
2019/10/13 Javascript
Vue路由的模块自动化与统一加载实现
2020/06/05 Javascript
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
2020/07/24 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
[03:02]2014DOTA2西雅图邀请赛 让队员自己告诉你DK NAVI备战情况
2014/07/08 DOTA
python双向链表实现实例代码
2013/11/21 Python
python基础教程之Hello World!
2014/08/29 Python
Python numpy实现数组合并实例(vstack,hstack)
2018/01/09 Python
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
python用户评论标签匹配的解决方法
2018/05/31 Python
nginx黑名单和django限速,最简单的防恶意请求方法分享
2019/08/09 Python
python实现简单成绩录入系统
2019/09/19 Python
python的json包位置及用法总结
2020/06/21 Python
Python grpc超时机制代码示例
2020/09/14 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
Python爬取网站图片并保存的实现示例
2021/02/26 Python
日本非常有名的内衣丝袜品牌:GUNZE
2017/01/06 全球购物
英国最大的邮寄种子和植物公司:Thompson & Morgan
2017/09/21 全球购物
以下为Windows NT 下的32 位C++程序,请计算sizeof 的值
2016/12/07 面试题
技术总监的工作职责
2013/11/13 职场文书
医药工作岗位求职信分享
2013/12/31 职场文书
法制宣传日活动总结
2014/04/29 职场文书
英语系本科生求职信
2014/07/15 职场文书