这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
这篇文章主要为大家详细介绍了 javascript 拖拽应用实例,拖拽条拖到底,验证码显示出来,感兴趣的小伙伴们可以参考一下
经常在网站别人的网站的注册页中看到一个拖拽验证的效果,就是它的验证码刚开始不出来,而是有一个拖拽的条,你必须将这个拖拽条拖到底,验证码才出来,说了感觉跟没说一样,你还是不理解,好吧,我给个图你看看:
这个是在万网的注册页中所截的图,大概的效果就是,当拖动那个拖拽框时,如果拖拽框没有拖到最右边,则拖拽框会移动到初始位置,如果拖动到最右边,则拖拽框显示为对勾,中间的文字也变了,但是我试了一下,他的验证码的框没有出来,不知道是改了还是怎么的,我没有继续点击确定往下进行,那不是我们要讲的重点,我就在他的代码中把那个验证的框手动显示出来了,也就是 gif 最后的几帧中的画面,这样讲,应该懂我要讲的是什么意思吧,没错,我们今天要实现的就是这个拖拽验证的效果,拖拽后的验证框我们就不做了
看看我们做的效果:
gif 图感觉有点卡,实际效果要流畅一些,看看效果基本上无差吧,具体实现原理我就不讲了,如果还不知道怎么实现的同学,可以出门往左转,找到我写的一篇 :javascript 实现 PC 网页里的拖拽效果 ,里面写的比较清楚,掌握拖拽的基本原理,实现这样的效果
那就是小菜一碟了,哈哈,那我就把代码贴出来给大家看看,仅供参考:
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_box{
- 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,#4d4d4d),color-stop(.5,#fff),color-stop(.6,#4d4d4d),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:
- <div id="drag_wrap">
- <div id="drag_bg">
- </div>
- <div id="drag_box">
- </div>
- <div id="drag_txt">
- <span class="startTxt">
- 请按住滑块,拖动到最右边
- </span>
- </div>
- </div>
JavaScript:
- window.onload = function(){
- drag("drag_box","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);
- }
- //这里是获取css样式函数
- function getStyle(obj,attr){
- if(obj.currentStyle){
- return obj.currentStyle[attr];
- }else{
- return getComputedStyle(obj,false)[attr];
- }
- }
- }
参数说明:
这里给了 5 个参数,obj,parentNode,bgObj,oTxt,endFn
obj:表示拖拽对象
parentNode:表示拖拽对象活动区域,一般设为父级
bgObj:表示拖拽时的背景颜色变化的对象
oTxt:表示文本变化对象
endFn:返回函数,非必填
来源: http://www.phperz.com/article/17/0419/266557.html