javascript拖拽应用实例


Posted in Javascript onMarch 25, 2016

之前文章中也讲了一下拖拽的基本思想,理论是有了,那实践呢,可以运用到什么地方呢?下面就给大家带来一个用拖拽思想写的一个小实例,供大家参考,大致效果看下图:

javascript拖拽应用实例

就是这样一个简单的一个拖拽条,你可以把它理解为滚动条,也可以理解为表单中的数量选择控件,也可以理解为进度条,等等,反正你可以改成很多你想要的效果,废话不多说,我们来看看这个是怎么做的吧!

想了想,感觉原理就不用说了吧,我在拖拽效果中就已经说的很清楚了,不清楚的同学可以出门左转,查看 javascript小实例,PC网页里的拖拽 ,我就直接贴代码了:

css:

<style>
#drag_wrap{
  width:220px;
  height:10px;
  position:relative;
  margin:100px auto;
}
.dis_bg{
  width:200px;
  height:10px;
  border-radius:10px;
  background:#ccc;
  margin-left:10px;
}
#drag_bg{
  width:0;
  height:10px;
  border-radius:10px;
  background:#0CF;
}
#drag_box{
  width:20px;
  height:20px;
  border-radius:10px;
  background:#F30;
  position:absolute;
  top:-5px;
  left:0;
  cursor:move;
}
#drag_box span{
  width:40px;
  height:20px;
  text-align:center;
  line-height:20px;
  border:1px solid #ccc;
  position:absolute;
  top:-25px;
  left:-10px;
  color:#333;
  background:#fff;
}
#drag_wrap1{
  width:10px;
  height:220px;
  position:relative;
  margin:100px auto;
}
.dis_bg1{
  width:10px;
  height:200px;
  border-radius:10px;
  background:#ccc;
  position:absolute;
  top:10px;
}
#drag_bg1{
  width:10px;
  height:0;
  border-radius:10px;
  background:#0CF;
}
#drag_bg1{
  width:10px;
  height:0;
  border-radius:10px;
  background:#0CF;
}
#drag_box1{
  width:20px;
  height:20px;
  border-radius:10px;
  background:#F30;
  position:absolute;
  top:-5px;
  left:-5px;
  cursor:move;
}
#drag_box1 span{
  width:40px;
  height:20px;
  text-align:center;
  line-height:20px;
  border:1px solid #ccc;
  position:absolute;
  top:0;
  left:25px;
  color:#333;
  background:#fff;
}
</style>

html:

<div id="drag_wrap">
    <div class="dis_bg">
      <div id="drag_bg"></div>
    </div>
    <div id="drag_box"><span>0</span></div>
     
  </div>
  <div id="drag_wrap1">
    <div class="dis_bg1">
      <div id="drag_bg1"></div>
    </div>
    <div id="drag_box1"><span>0</span></div>
  </div>

JavaScript:

window.onload = function(){
 
    drag("drag_box","drag_wrap","drag_bg","left");
    drag("drag_box1","drag_wrap1","drag_bg1","top");
     
    function drag(obj,parentNode,bgObj,attr,endFn){
      var obj = document.getElementById(obj);
      var parentNode = document.getElementById(parentNode);
      var bgObj = document.getElementById(bgObj);
      var oNum = obj.getElementsByTagName('span')[0];
      obj.onmousedown = function(ev){
        var ev = ev || event;
         
        //非标准设置全局捕获(IE)
        if(obj.setCapture){
          obj.setCapture()  
        };
 
        var disX = ev.clientX - this.offsetLeft,
          disY = ev.clientY - this.offsetTop;
        var oWidth = obj.offsetWidth,
          oHeight = obj.offsetHeight;
        var pWidth = parentNode.offsetWidth,
          pHeight = parentNode.offsetHeight;     
        document.onmousemove = function(ev){
          var ev = ev || event;
          if(attr == "left"){ //横向
            var left = ev.clientX - disX;
            //左侧
            if(left <= 0){
              left = 0;
            }else if(left > pWidth - oWidth){//右侧
              left = pWidth - oWidth;
            };
            obj.style.left = bgObj.style.width = left + 'px';
            oNum.innerHTML = left;
             
          }else if(attr == "top"){ //竖向
            var top = ev.clientY - disY;
             //上面
            if(top <= 0){
              top = 0;
            }else if(top > pHeight - oHeight){//下面
              top = pHeight - oHeight;
            };
            obj.style.top = bgObj.style.height = top + 'px';
            oNum.innerHTML = top;
          };
           
        };
        document.onmouseup = function(ev){
          var ev = ev || event;
          document.onmousemove = document.onmouseup = null;
          endFn && endFn();
          //非标准释放全局捕获(IE)
          if(obj.releaseCapture){
            obj.releaseCapture()  
          };
 
        };
        return false;
      }; 
    } 
   
  }

参数说明:

这里给了5个参数,obj,parentNode,bgObj,attr,endFn,分别是:

obj:被拖拽对象

parentNode:限制被拖拽对象活动区域的对象,一般设为它的父级

bgObj:拖动时的表色背景对象

attr:2个参数left,top,表示是横向拖拽还是纵向拖拽

endFn:返回函数,有就执行,没有就不执行,非必填

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
用js实现预览待上传的本地图片
Mar 15 Javascript
jquery获取ASP.NET服务器端控件dropdownlist和radiobuttonlist生成客户端HTML标签后的value和text值
Jun 28 Javascript
地址栏传递中文参数乱码在js里用escape转码
Aug 28 Javascript
学习JavaScript设计模式(代理模式)
Dec 03 Javascript
深入剖析JavaScript中的函数currying柯里化
Apr 29 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
Jun 12 Javascript
JS事件添加和移出的兼容写法示例
Jun 20 Javascript
详解js中call与apply关键字的作用
Nov 21 Javascript
详解用webpack把我们的业务模块分开打包的方法
Jul 20 Javascript
详解ES6通过WeakMap解决内存泄漏问题
Mar 09 Javascript
vue 项目地址去掉 #的方法
Oct 20 Javascript
浅析JavaScript 函数防抖和节流
Jul 13 Javascript
JavaScript学习笔记之创建对象
Mar 25 #Javascript
JS实现的颜色实时渐变效果完整实例
Mar 25 #Javascript
JavaScript学习笔记之ES6数组方法
Mar 25 #Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
Mar 25 #Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
Mar 25 #Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
Mar 25 #Javascript
JS+CSS实现的漂亮渐变背景特效代码(6个渐变效果)
Mar 25 #Javascript
You might like
PHP+memcache实现消息队列案例分享
2014/05/21 PHP
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
PHP中创建和编辑Excel表格的方法
2018/09/13 PHP
Mac下快速搭建PHP开发环境步骤详解
2019/05/05 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
Tab页界面 用jQuery及Ajax技术实现(php后台)
2011/10/12 Javascript
IE6浏览器下resize事件被执行了多次解决方法
2012/12/11 Javascript
JS判断客服QQ号在线还是离线状态的方法
2015/01/13 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
JavaScript继承学习笔记【新手必看】
2016/05/10 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
JS判断是否手机或pad访问实现方法
2016/12/09 Javascript
JSON字符串和JSON对象相互转化实例详解
2017/01/05 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
React+Antd+Redux实现待办事件的方法
2019/03/14 Javascript
基于element-ui封装表单金额输入框的方法示例
2021/01/06 Javascript
[05:08]2014DOTA2国际邀请赛 Hao专访复仇的胜利很爽
2014/07/15 DOTA
35个Python编程小技巧
2014/04/01 Python
python多线程抓取天涯帖子内容示例
2014/04/03 Python
python实现判断数组是否包含指定元素的方法
2015/07/15 Python
numpy.delete删除一列或多列的方法
2018/04/03 Python
使用NumPy和pandas对CSV文件进行写操作的实例
2018/06/14 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
Python函数装饰器常见使用方法实例详解
2019/03/30 Python
全球速卖通俄罗斯站:AliExpress俄罗斯
2019/06/17 全球购物
某公司.Net方向面试题
2014/04/24 面试题
工程造价专业大学生自荐信
2013/10/01 职场文书
计算机专业大学生的自我评价
2013/11/14 职场文书
文秘大学生求职信
2014/02/25 职场文书
《春到梅花山》教学反思
2014/04/16 职场文书
数字化校园建设方案
2014/05/03 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
学生违反校规检讨书
2014/10/28 职场文书
酒店工程部岗位职责
2015/02/12 职场文书
2016圣诞节贺卡寄语
2015/12/07 职场文书