Rumah >hujung hadapan web >tutorial js >Contoh aplikasi seret dan lepas JavaScript (2)_kemahiran javascript
Saya sering melihat kesan pengesahan drag-and-drop pada halaman pendaftaran tapak web lain, iaitu kod pengesahan tidak keluar pada mulanya, tetapi terdapat bar drag-and-drop bar seret ini ke penghujung , kod pengesahan baru sahaja keluar, rasanya sama seperti saya tidak mengatakannya, anda masih tidak faham, okay, saya beri anda gambar:
Ini adalah gambar yang diambil dari halaman pendaftaran Wanwang Kesan anggaran ialah apabila menyeret kotak seret, jika kotak seret tidak diseret ke hujung kanan, kotak seret akan bergerak ke kedudukan awal anda seret ke paling kanan, kotak seret akan dipaparkan sebagai tanda semak, dan teks di tengah juga akan berubah, tetapi saya mencubanya, dan kotak kod pengesahannya tidak keluar ia telah diubah atau sesuatu, saya tidak Teruskan klik OK untuk meneruskan. Itu bukan fokus apa yang kita bincangkan Saya secara manual memaparkan kotak pengesahan dalam kodnya, iaitu gambar dalam beberapa bingkai terakhir gif. Dengan cara ini, anda harus memahami apa yang saya mahukan Apa yang anda maksudkan Ya, apa yang kami ingin capai hari ini ialah kesan pengesahan seret dan lepas Kami tidak akan melakukan kotak pengesahan selepas menyeret
Lihat hasil yang kami lakukan:
Imej gif terasa agak tersekat Kesan sebenar saya akan melihat bahawa kesannya pada dasarnya adalah sama , anda boleh keluar dan belok kiri untuk mencari Artikel yang saya tulis: Javascript menyedari kesan seret dan lepas dalam halaman web PC Kuasai prinsip asas seretan dan jatuhkan untuk mencapai kesan sedemikian
Itu sekeping kek, haha, kemudian saya akan siarkan kod untuk dilihat oleh semua orang, untuk rujukan sahaja:
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]; } } }
Perihalan parameter:
Lima parameter diberikan di sini, obj, parentNode, bgObj, oTxt, endFn
obj: mewakili objek seret
parentNode: Mewakili kawasan aktif objek seret, biasanya ditetapkan sebagai induk
bgObj: Objek yang mewakili perubahan warna latar belakang apabila menyeret
oTxt: Mewakili objek perubahan teks
endFn: fungsi kembali, pilihan
Di atas adalah keseluruhan kandungan artikel ini, saya harap ia akan membantu kajian semua orang.