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 相关文章推荐
javascript replace()正则替换实现代码
Feb 26 Javascript
JS遮罩层效果 兼容ie firefox jQuery遮罩层
Jul 26 Javascript
jquery实现文本框鼠标右击无效以及不能输入的代码
Nov 05 Javascript
js constructor的实际作用分析
Nov 15 Javascript
Fixie.js 自动填充内容的插件
Jun 28 Javascript
javascript动态添加样式(行内式/嵌入式/外链式等规则)
Jun 24 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
Aug 03 Javascript
jquery 全选、全不选、反选效果的实现代码【推荐】
May 05 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
Aug 30 Javascript
js中document.referrer实现移动端返回上一页
Feb 22 Javascript
RxJS在TypeScript中的简单使用详解
Apr 13 Javascript
原生js实现html手机端城市列表索引选择城市
Jun 24 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
DIY一个适配电脑声卡的动圈话筒放大器
2021/03/02 无线电
如何使用PHP获取网络上文件
2006/10/09 PHP
PHP与SQL注入攻击防范小技巧
2011/09/16 PHP
多个PHP中文字符串截取函数
2013/11/12 PHP
使用xampp搭建运行php虚拟主机的详细步骤
2015/10/21 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
php微信开发之图片回复功能
2018/06/14 PHP
php数值计算num类简单操作示例
2020/05/15 PHP
静态的动态续篇之来点XML
2006/12/23 Javascript
推荐dojo学习笔记
2007/03/24 Javascript
javascript 动态参数判空操作
2008/12/22 Javascript
jquery 经典动画菜单效果代码
2010/01/26 Javascript
轻轻松松学JS调试(不下载任何工具)
2010/04/14 Javascript
js传中文参数controller里获取参数乱码问题解决方法
2014/01/03 Javascript
jQuery中append()方法用法实例
2015/01/08 Javascript
JavaScript使用indexOf获得子字符串在字符串中位置的方法
2015/04/06 Javascript
Angular.js中控制器之间的传值详解
2017/04/24 Javascript
利用JS实现scroll自定义滚动效果详解
2017/10/17 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
在React 组件中使用Echarts的示例代码
2017/11/08 Javascript
vue 表单输入格式化中文输入法异常问题
2018/05/30 Javascript
实用的 vue tags 创建缓存导航的过程实现
2020/12/03 Vue.js
Python实现的RSS阅读器实例
2015/07/25 Python
kafka-python 获取topic lag值方式
2019/12/23 Python
Django 实现对已存在的model进行更改
2020/03/28 Python
python 生成器需注意的小问题
2020/09/29 Python
用pip给python安装matplotlib库的详细教程
2021/02/24 Python
使用CSS3设计地图上的雷达定位提示效果
2016/04/05 HTML / CSS
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
北京振戎融通Java面试题
2015/09/03 面试题
幼儿师范毕业生自荐信
2013/11/09 职场文书
领导班子“四风问题”“整改方案
2014/10/02 职场文书
群众路线专项整治方案
2014/10/27 职场文书
2016年禁毒宣传活动总结
2016/04/05 职场文书
南阳市白酒市场的调查报告
2019/11/08 职场文书
shell进度条追踪指令执行时间的场景分析
2022/06/16 Servers