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仿微信聊天界面
May 06 jQuery
javascript+jQuery实现360开机时间显示效果
Nov 03 jQuery
基于jQuery中ajax的相关方法汇总(必看篇)
Nov 08 jQuery
jQuery实现点击图标div循环放大缩小功能
Sep 30 jQuery
JQuery实现ajax请求的示例和注意事项
Dec 10 jQuery
jQuery实现的别踩白块小游戏完整示例
Jan 07 jQuery
简单易扩展可控性强的Jquery转盘抽奖程序
Mar 16 jQuery
jQuery Migrate 插件用法实例详解
May 22 jQuery
jQuery实现鼠标移入显示蒙版效果
Jan 11 jQuery
jQuery实现简单日历效果
Jul 05 jQuery
jQuery带控制按钮轮播图插件
Jul 31 jQuery
jQuery插件实现图片轮播效果
Oct 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
实用函数3
2007/11/08 PHP
Zend Guard一些常见问题解答
2008/09/11 PHP
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
js判断浏览器的比较全的代码
2007/02/13 Javascript
用javascript实现分割提取页面所需内容
2007/05/09 Javascript
javascript 定义初始化数组函数
2009/09/07 Javascript
ExtJS Ext.MessageBox.alert()弹出对话框详解
2010/04/02 Javascript
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
JQuery对class属性的操作实现按钮开关效果
2013/10/11 Javascript
Extjs根据条件设置表格某行背景色示例
2014/07/23 Javascript
jQuery获取选中单选按钮radio的值
2016/12/27 Javascript
Bootstrap输入框组件简单实现代码
2017/03/06 Javascript
使用Webpack提高Vue.js应用的方式汇总(四种)
2017/07/10 Javascript
JavaScript中的一些隐式转换和总结(推荐)
2017/12/22 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
Vue el-autocomplete远程搜索下拉框并实现自动填充功能(推荐)
2019/10/25 Javascript
tracking.js实现前端人脸识别功能
2020/04/16 Javascript
在Vue中使用Echarts实例图的方法实例
2020/10/10 Javascript
Python中使用PDB库调试程序
2015/04/05 Python
解决pyttsx3无法封装的问题
2018/12/24 Python
Python实战之制作天气查询软件
2019/05/14 Python
Python新手如何进行闭包时绑定变量操作
2020/05/29 Python
python实现企业微信定时发送文本消息的示例代码
2020/11/24 Python
css实例教程 一款纯css3实现的超炫动画背画特效
2014/11/05 HTML / CSS
美国转售二手商品的电子商务平台:BLINQ
2018/12/13 全球购物
若干个Java基础面试题
2015/05/19 面试题
企划专员岗位职责
2013/12/09 职场文书
高三政治教学反思
2014/02/06 职场文书
网络管理专业求职信
2014/03/15 职场文书
离婚协议书怎么写
2015/01/26 职场文书
2015年安全生产管理工作总结
2015/05/25 职场文书
运动会三级跳加油稿
2015/07/21 职场文书
pytorch 权重weight 与 梯度grad 可视化操作
2021/06/05 Python
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android
Python爬虫入门案例之回车桌面壁纸网美女图片采集
2021/10/16 Python
利用python做数据拟合详情
2021/11/17 Python