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 相关文章推荐
toString()一个会自动调用的方法
Feb 08 Javascript
网页打开自动最大化的js代码
Aug 22 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
Jul 06 Javascript
PHP+jQuery+Ajax实现多图片上传效果
Mar 14 Javascript
js判断图片加载完成后获取图片实际宽高的方法
Feb 25 Javascript
JavaScript位移运算符(无符号) &gt;&gt;&gt; 三个大于号 的使用方法详解
Mar 31 Javascript
谈谈JavaScript数组常用方法总结
Jan 24 Javascript
Bootstrap 表单验证formValidation 实现远程验证功能
May 17 Javascript
node前端开发模板引擎Jade的入门
May 11 Javascript
详解Vue单元测试case写法
May 24 Javascript
javascript显示动态时间的方法汇总
Jul 06 Javascript
微信小程序拖拽排序列表的示例代码
Jul 08 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
WAR3重制版DOTA 5V5初体验
2020/04/09 DOTA
PHP 数组遍历方法大全(foreach,list,each)
2010/06/30 PHP
php smarty truncate UTF8乱码问题解决办法
2014/06/13 PHP
WampServer搭建php环境时遇到的问题汇总
2015/07/23 PHP
PHP执行linux命令常用函数汇总
2016/02/02 PHP
php版微信小店API二次开发及使用示例
2016/11/12 PHP
jquery offset函数应用实例
2012/11/14 Javascript
js函数调用常用方法详解
2012/12/03 Javascript
js关闭当前页面(窗口)的几种方式总结
2013/03/05 Javascript
jquery中获取元素里某一特定子元素的代码
2014/12/02 Javascript
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
javascript中的 object 和 function小结
2016/08/14 Javascript
JS实现颜色梯度与渐变效果完整实例
2016/12/30 Javascript
node.js连接MongoDB数据库的2种方法教程
2017/05/17 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
2017/06/26 Javascript
javascript实现文字无缝滚动效果
2017/08/26 Javascript
详解easyui基于 layui.laydate日期扩展组件
2018/07/18 Javascript
解决JavaScript layui 下拉框不显示的问题
2018/08/14 Javascript
NodeJs入门教程之定时器和队列
2019/03/08 NodeJs
微信小程序+腾讯地图开发实现路径规划绘制
2019/05/22 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
python基础教程之python消息摘要算法使用示例
2014/02/10 Python
Python实现简单网页图片抓取完整代码实例
2017/12/15 Python
Python中str.join()简单用法示例
2018/03/20 Python
PyCharm代码整体缩进,反向缩进的方法
2018/06/25 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
通过css3动画和opacity透明度实现呼吸灯效果
2019/08/09 HTML / CSS
通过css3的filter滤镜改变png图片的颜色的示例代码
2020/05/06 HTML / CSS
葡萄牙鞋子品牌:Fair
2016/12/10 全球购物
Bitiba意大利:在线宠物商店
2020/10/31 全球购物
护士在校生自荐信
2014/02/01 职场文书
热爱祖国的演讲稿
2014/05/04 职场文书
民族团结演讲稿范文
2014/08/27 职场文书
处级领导班子全部召开专题民主生活会情况汇报
2014/09/27 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
2014年小学校长工作总结
2014/12/08 职场文书