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 相关文章推荐
jquery 的 $(&quot;#id&quot;).html() 无内容的解决方法
Jun 07 Javascript
jquery ajax return没有返回值的解决方法
Oct 20 Javascript
jquery focus(fn),blur(fn)方法实例代码
Dec 16 Javascript
jquery 获取标签名(tagName)示例代码
Jul 11 Javascript
php register_shutdown_function函数详解
Jul 23 Javascript
Vue $emit $refs子父组件间方法的调用实例
Sep 12 Javascript
elementUI中Table表格问题的解决方法
Dec 04 Javascript
Vue CLI 3.x 自动部署项目至服务器的方法
Apr 02 Javascript
Javascript ParentNode和ChildNode接口原理解析
Mar 16 Javascript
Vue表单提交点击事件只允许点击一次的实例
Oct 23 Javascript
jQuery实现穿梭框效果
Jan 19 jQuery
Node.js中的异步生成器与异步迭代详解
Jan 31 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代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
thinkphp 多表 事务详解
2013/06/17 PHP
php简单获取目录列表的方法
2015/03/24 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
详解PHP如何更好的利用PHPstorm的自动提示
2017/08/18 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
再谈IE中Flash控件的自动激活 ObjectWrap
2007/03/09 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
2013/08/18 Javascript
node.js中的fs.createReadStream方法使用说明
2014/12/17 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
js+css绘制颜色动态变化的圈中圈效果
2016/01/27 Javascript
Bootstrap3 input输入框插入glyphicon图标的方法
2016/05/16 Javascript
浅谈vue路径优化之resolve
2017/10/13 Javascript
JavaScript指定断点操作实例教程
2018/09/18 Javascript
node全局变量__dirname与__filename的区别
2019/01/14 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
2019/06/19 Javascript
Vue 实现分页与输入框关键字筛选功能
2020/01/02 Javascript
浅谈python新式类和旧式类区别
2019/04/26 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
基于Python2、Python3中reload()的不同用法介绍
2019/08/12 Python
python通过txt文件批量安装依赖包的实现步骤
2019/08/13 Python
pytorch masked_fill报错的解决
2020/02/18 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
2020/07/13 Python
css3实现冲击波效果的示例代码
2018/01/11 HTML / CSS
印度在线内衣和时尚目的地:Zivame
2017/09/28 全球购物
德国最大的婴儿用品网上商店:Kidsroom.de(支持中文)
2020/09/02 全球购物
入党积极分子思想汇报范文
2014/01/05 职场文书
董事长助理岗位职责
2014/02/18 职场文书
班干部演讲稿
2014/04/24 职场文书
同学聚会策划方案
2014/06/06 职场文书
小学生十佳少年事迹材料
2014/08/20 职场文书
2015应届毕业生自荐信范文
2015/03/05 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS