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插件FusionCharts实现的Marimekko图效果示例【附demo源码】
Mar 24 jQuery
jquery append与appendTo方法比较
May 24 jQuery
利用jquery如何从json中读取数据追加到html中
Dec 01 jQuery
jQuery中库的引用方法
Jan 06 jQuery
jQuery实现定时隐藏对话框的方法分析
Feb 12 jQuery
jQuery实现轮播图及其原理详解
Apr 12 jQuery
jQuery点击页面其他部分隐藏下拉菜单功能
Nov 27 jQuery
Easyui 关闭jquery-easui tab标签页前触发事件的解决方法
Apr 28 jQuery
jquery+php后台实现省市区联动功能示例
May 23 jQuery
jQuery模仿ToDoList实现简单的待办事项列表
Dec 30 jQuery
jQuery实现的图片点击放大缩小功能案例
Jan 02 jQuery
jQuery实现全选按钮
Jan 01 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
信用卡效验程序
2006/10/09 PHP
php通过session防url攻击方法
2014/12/10 PHP
Javascript将string类型转换int类型
2010/12/09 Javascript
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
2011/06/27 Javascript
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
Google (Local) Search API的简单使用介绍
2013/11/28 Javascript
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
Jquery获取元素的父容器对象示例代码
2014/02/10 Javascript
Jquery.Form 异步提交表单的简单实例
2014/03/03 Javascript
javascript检测浏览器的缩放状态实现代码
2014/09/28 Javascript
jQuery实现页面顶部显示的进度条效果完整实例
2015/12/09 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
Nodejs中的this详解
2016/03/26 NodeJs
浅谈js的异步执行
2016/10/18 Javascript
jQuery中Nicescroll滚动条插件的用法
2016/11/10 Javascript
jQuery实现div跟随鼠标移动
2020/08/20 jQuery
jquery实现直播视频弹幕效果
2020/02/25 jQuery
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
举例详解Python中的split()函数的使用方法
2015/04/07 Python
django 常用orm操作详解
2017/09/13 Python
Python for循环生成列表的实例
2018/06/15 Python
python计算两个矩形框重合百分比的实例
2018/11/07 Python
Python实现的批量修改文件后缀名操作示例
2018/12/07 Python
Python 使用 docopt 解析json参数文件过程讲解
2019/08/13 Python
Python Flask异步发送邮件实现方法解析
2020/08/01 Python
Python os库常用操作代码汇总
2020/11/03 Python
python和opencv构建运动检测器的实现
2021/03/03 Python
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
Styleonme中文网:韩国高档人气品牌
2017/06/21 全球购物
大学生个人事迹材料
2014/01/21 职场文书
运动会跳远广播稿5篇
2014/09/17 职场文书
会计工作态度自我评价
2015/03/06 职场文书
go语言中切片与内存复制 memcpy 的实现操作
2021/04/27 Golang