• javascript小实例,拖拽应用(一)


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

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

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

    css:

    <style>
    #drag_wrap{
    	220px;
    	height:10px;
    	position:relative;
    	margin:100px auto;
    }
    .dis_bg{
    	200px;
    	height:10px;
    	border-radius:10px;
    	background:#ccc;
    	margin-left:10px;
    }
    #drag_bg{
    	0;
    	height:10px;
    	border-radius:10px;
    	background:#0CF;
    }
    #drag_box{
    	20px;
    	height:20px;
    	border-radius:10px;
    	background:#F30;
    	position:absolute;
    	top:-5px;
    	left:0;
    	cursor:move;
    }
    #drag_box span{
    	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{
    	10px;
    	height:220px;
    	position:relative;
    	margin:100px auto;
    }
    .dis_bg1{
    	10px;
    	height:200px;
    	border-radius:10px;
    	background:#ccc;
    	position:absolute;
    	top:10px;
    }
    #drag_bg1{
    	10px;
    	height:0;
    	border-radius:10px;
    	background:#0CF;
    }
    #drag_bg1{
    	10px;
    	height:0;
    	border-radius:10px;
    	background:#0CF;
    }
    #drag_box1{
    	20px;
    	height:20px;
    	border-radius:10px;
    	background:#F30;
    	position:absolute;
    	top:-5px;
    	left:-5px;
    	cursor:move;
    }
    #drag_box1 span{
    	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:返回函数,有就执行,没有就不执行,非必填

    我找了几个在线工具,可以将你的代码贴进去,然后可以让别人看到你的代码,也可以看到效果,推荐给大家,这里比较好用:

    http://runjs.cn/

    好了,不做广告了,用人家的东西,就应该给回报,哈哈,小实例效果看如下地址:

    http://runjs.cn/code/ueod5pnf

    好了,效果做的比较简陋,有需要的同学可以根据实际情况,把UI做的漂亮一点,这只是一个拖拽选择的最原始效果,就如同现实中的毛坯房,等待你去完善它,这里只给一个思路!

    就这么多吧,行为仓促,如果有不对的地方或者是大家有更好的实现方法,希望能多多指教,不胜感谢!

  • 相关阅读:
    整数的可除性
    椭圆曲线的基本概念
    数组方法分析-笔记
    JS-作用域
    JS-变量存储
    Web框架-inoic
    圣杯布局
    js,php中的面向对象
    正则
    math对象
  • 原文地址:https://www.cnblogs.com/liugang-vip/p/5318646.html
Copyright © 2020-2023  润新知