ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptドラッグ&ドロップ応用例(2)_JavaScriptスキル
他のウェブサイトの登録ページでドラッグアンドドロップ認証エフェクトをよく見かけます。つまり、最初は認証コードが出てきませんが、ドラッグアンドドロップバーがあります。このドラッグバーを最後までドラッグすると、確認コードが出てきたばかりで、言わなかったのと同じように感じますが、それでもわかりません。写真をあげましょう:
これは Wanwang の登録ページから取得した画像です。おおよその効果は、ドラッグ ボックスを右端までドラッグしていない場合、ドラッグ ボックスは初期位置に移動することです。右端にドラッグすると、ドラッグボックスにチェックマークが表示され、真ん中の文字も変わりますが、試してみましたが、確認コードボックスは出てきませんでした。変更されたか何かで、[OK] をクリックして続行しませんでした。それは、私が話していることの焦点ではありません。コードの最後の数フレームにある画像が、手動で表示されたものです。 gif. このようにして、私が何を望んでいるのかを理解してください。 どういう意味ですか? はい、今日達成したいのは、ドラッグ アンド ドロップ検証の効果です。
をドラッグした後に検証ボックスを実行しません。実行した結果を見てください:
GIF イメージは少し引っかかっているように感じますが、実際の効果は基本的に同じであることがわかります。実装方法がわからない場合は省略します。私が書いた記事: Javascript は PC の Web ページでドラッグ アンド ドロップ効果を実現します ドラッグの基本原理をマスターします。ドロップしてそのような効果を達成します
それは簡単です(笑)、参考のために、誰でも見られるようにコードを投稿します。
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]; } } }
パラメータの説明:
ここでは、obj、parentNode、bgObj、oTxt、endFn の 5 つのパラメーターが指定されています
obj: ドラッグ オブジェクトを表します
parentNode: ドラッグ オブジェクトのアクティブ領域を表し、通常は親として設定されます
bgObj: ドラッグ時の背景色の変化を表すオブジェクト
oTxt: テキスト変更オブジェクトを表します
endFn: 戻り関数、オプション
以上がこの記事の全内容です。皆様の学習のお役に立てれば幸いです。