jquery实现拖拽小方块效果

 更新时间:2020年12月10日 14:21:44   作者:赚钱养个快乐小智障  
这篇文章主要为大家详细介绍了jquery实现拖拽小方块效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

今天来讲一个很常用的拖拽功能,主要是利用一点css,js和jquery,很简单但同时也很重要,掌握好才是最关键的!

下面来看下效果图:

这里可以看到,在鼠标hover的时候会有一个透明度的变化和一个盒子阴影!并且在右下角会实时的显示出小方块移动时横纵坐标的变化!

可以看到有一个盒子阴影

在鼠标单击按住的时候会变红,然后可以拖动小块随意移动

我们在看代码之前可以先了解下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.messager.js插件导致页面抖动的解决方法

    jquery.messager.js插件导致页面抖动的解决方法

    这盘文章介绍了jquery.messager.js插件导致页面抖动的解决方法,有需要的朋友可以参考一下
    2013-07-07
  • jQuery元素选择器用法实例

    jQuery元素选择器用法实例

    这篇文章主要介绍了jQuery元素选择器用法,通过一个简单的隐藏div元素实例讲述了元素选择器的用法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-12-12
  • 基于jQuery实现点击最后一行实现行自增效果的表格

    基于jQuery实现点击最后一行实现行自增效果的表格

    现在任何事务都追求效率和人性化,当然网页效果也是如此,如果一个可以编辑数据的表格,编辑到最后一行的时候,点击可以自动添加一行,这样算是一个比较人性化的效果,可以免去一丝劳顿之苦,下面分享一段这样的代码
    2016-01-01
  • jquery判断checkbox是否选中及改变checkbox状态的实现方法

    jquery判断checkbox是否选中及改变checkbox状态的实现方法

    下面小编就为大家带来一篇jquery判断checkbox是否选中及改变checkbox状态的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • jQuery实现批量判断表单中文本框非空的方法(2种方法)

    jQuery实现批量判断表单中文本框非空的方法(2种方法)

    这篇文章主要介绍了jQuery实现批量判断表单中文本框非空的方法,实例分析了2种实现判定非空的技巧,涉及jQuery页面元素遍历的相关技巧,需要的朋友可以参考下
    2015-12-12
  • jQuery formValidator表单验证

    jQuery formValidator表单验证

    这篇文章主要介绍了jQuery formValidator表单验证 的相关资料,需要的朋友可以参考下
    2016-01-01
  • jquery实现定时自动轮播特效

    jquery实现定时自动轮播特效

    这篇文章主要为大家详细介绍了jquery实现定时自动轮播特效,讲解内容很详细,条理清晰,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • 基于jQuery仿淘宝产品图片放大镜特效

    基于jQuery仿淘宝产品图片放大镜特效

    这篇文章主要介绍了基于jQuery仿淘宝产品图片放大镜特效,使用非组件方法来实现放大镜效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • jquery checkbox全选反选效果代码

    jquery checkbox全选反选效果代码

    jquery checkbox全选反选效果代码,需要的朋友可以参考下。
    2009-11-11
  • 使用jquery读取html5 localstorage的值的方法

    使用jquery读取html5 localstorage的值的方法

    在HTML 5中,localstorage是个不错的东西,在支持localstorage的浏览器中, 能持久化用户表单的输入,即使关掉浏览器,下次重新打开浏览器访问,也能读出其值,很不错的一个东西,接下来实例介绍,需要的朋友可以参考下
    2013-01-01

最新评论