javascript拖拽应用实例(二)

前端之家收集整理的这篇文章主要介绍了javascript拖拽应用实例(二)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

经常在网站别人的网站的注册页中看到一个拖拽验证的效果,就是它的验证码刚开始不出来,而是有一个拖拽的条,你必须将这个拖拽条拖到底,验证码才出来,说了感觉跟没说一样,你还是不理解,好吧,我给个图你看看:

这个是在万网的注册页中所截的图,大概的效果就是,当拖动那个拖拽框时,如果拖拽框没有拖到最右边,则拖拽框会移动到初始位置,如果拖动到最右边,则拖拽框显示为对勾,中间的文字也变了,但是我试了一下,他的验证码的框没有出来,不知道是改了还是怎么的,我没有继续点击确定往下进行,那不是我们要讲的重点,我就在他的代码中把那个验证的框手动显示出来了,也就是gif最后的几帧中的画面,这样讲,应该懂我要讲的是什么意思吧,没错,我们今天要实现的就是这个拖拽验证的效果,拖拽后的验证框我们就不做了

看看我们做的效果

gif图感觉有点卡,实际效果要流畅一些,看看效果基本上无差吧,具体实现原理我就不讲了,如果还不知道怎么实现的同学,可以出门往左转,找到我写的一篇 :javascript实现PC网页里的拖拽效果 ,里面写的比较清楚,掌握拖拽的基本原理,实现这样的效果

那就是小菜一碟了,哈哈,那我就把代码贴出来给大家看看,仅供参考:

css:

<div class="jb51code">
<pre class="brush:css;">

drag_wrap{

width:300px;
height:35px;
position:relative;
background:#e8e8e8;
margin:100px auto;
}

drag_bg{

width:0;
height:35px;
background:#7ac23c;
position:absolute;
top:0;
left:0;
}

drag@R301_460@{

width:40px;
height:33px;
border:1px solid #ccc;
background:#fff url(images/rt.png) no-repeat center center;
position:absolute;
top:0;
left:0;
cursor:move;
z-index:2;
}

drag_txt{

width: 100%;
height: 100%;
text-align: center;
position: absolute;
z-index: 1;
background: transparent;
color: #9c9c9c;
line-height: 35px;
font-size: 12px;
}

drag_txt span{

cursor: default;
z-index: 0;
}

drag_txt .startTxt{

background: -webkit-gradient(linear,left top,right top,color-stop(0,#4d4d4d),color-stop(.4,color-stop(.5,#fff),color-stop(.6,color-stop(1,#4d4d4d));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
-webkit-animation: slidetounlock 3s infinite;
-webkit-text-size-adjust: none;
}
@-webkit-keyframes slidetounlock {
0% {
background-position: -200px 0
}

100% {
background-position: 200px 0
}
}
.yseTxt{
background:none;
color:#fff;
}

html:

301_460@">

JavaScript:

<div class="jb51code">
<pre class="brush:js;">
window.onload = function(){

drag("drag_@R_<a href="https://www.jb51.cc/tag/301/" target="_blank" class="keywords">301</a>_460@","drag_wrap","drag_bg","drag_txt");

function drag(obj,parentNode,bgObj,oTxt,endFn){
  var obj = document.getElementById(obj);
  var parentNode = document.getElementById(parentNode);
  var bgObj = document.getElementById(bgObj);
  var oTxt = document.getElementById(oTxt);
  var aSpan = oTxt.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;

      var left = ev.clientX - disX;
      //左侧
      if(left <= 0){
        left = 0;
      }else if(left >= pWidth - oWidth){//右侧
        left = pWidth - oWidth;
        obj.style.background = "#fff url(images/yes.png) no-repeat center center";
        aSpan.innerHTML = "验证通过"; //这里应该有ajax操作
        aSpan.className = 'yseTxt';
      };
      obj.style.left = bgObj.style.width = left + 'px';


    };
    document.onmouseup = function(ev){
      var ev = ev || event;
      document.onmousemove = document.onmouseup = null;
      //磁性吸附
      var L = ev.clientX - disX;
      if(L < pWidth - oWidth){
        startMove(obj,{left:0});
        startMove(bgObj,{width:0});  
      };
      endFn && endFn();
      //非标准释放全局捕获(IE)
      if(obj.releaseCapture){
        obj.releaseCapture()  
      };

    };
    return false;
  };  
}  
//这里是一个运动函数
function startMove(obj,json,endFn){
  clearInterval(obj.timer);
  obj.timer = setInterval(function(){
    var bBtn = true;
    for(var attr in json){
      var iCur = 0;
      if(attr == 'opacity'){
        if(Math.round(parseFloat(getStyle(obj,attr))*100)==0){
          iCur = Math.round(parseFloat(getStyle(obj,attr))*100);
        }else{
          iCur = Math.round(parseFloat(getStyle(obj,attr))*100) || 100;
        }  
      }
      else{
        iCur = parseInt(getStyle(obj,attr)) || 0;
      }
      var iSpeed = (json[attr] - iCur)/5;
      iSpeed = iSpeed >0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
      if(iCur!=json[attr]){
        bBtn = false;
      }
      if(attr == 'opacity'){
        obj.style.filter = 'alpha(opacity=' +(iCur + iSpeed)+ ')';
        obj.style.opacity = (iCur + iSpeed)/100;  
      }
      else{
        obj.style[attr] = iCur + iSpeed + 'px';
      }
    }
    if(bBtn){
      clearInterval(obj.timer);
      if(endFn){
        endFn.call(obj);
      }
    }
  },30);
}
//这里是<a href="https://www.jb51.cc/tag/huoqu/" target="_blank" class="keywords">获取</a>css样式<a href="https://www.jb51.cc/tag/hanshu/" target="_blank" class="keywords">函数</a>
function getStyle(obj,attr){
  if(obj.currentStyle){
    return obj.currentStyle[attr];  
  }else{
    return getComputedStyle(obj,false)[attr];
  }
}

}

参数说明:

这里给了5个参数,obj,endFn

obj:表示拖拽对象

parentNode:表示拖拽对象活动区域,一般设为父级

bgObj:表示拖拽时的背景颜色变化的对象

oTxt:表示文本变化对象

endFn:返回函数,非必填

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

原文链接:https://www.f2er.com/js/49551.html

猜你在找的JavaScript相关文章