运动的球(1)
1 <!doctype html> 2 <html> 3 <head> 4 <title>抛物运动</title> 5 <style> 6 html{height:100%;} 7 body{font-family:Arial;height:100%;} 8 .wrap{width:1200px;margin:0 auto;padding:60px 0;position:relative;height:100%;} 9 .x{border-top:1px solid #000;position:absolute;left:0;top:400px;right:0;} 10 .x:before{content:"X";font-size:40px;position:absolute;right:5px;} 11 .y{border-left:1px solid #000;position:absolute;left:600px;top:0;bottom:0;} 12 .y:before{content:"Y";font-size:40px;position:absolute;left:5px;} 13 #target{width:100px;height:40px;border-radius:20px;cursor:move;background:#f0f3f9;border:1px solid #3453d8;position:absolute;top:100px;left:100px;line-height:40px;} 14 .mid{display:block;text-align:center;} 15 #roll{width:30px;height:30px;border-radius:50%;position:absolute;top:400px;left:600px;margin-top:-15px;margin-left:-15px;background:#f2c823;} 16 </style> 17 </head> 18 <body> 19 <div class="wrap"> 20 <i class="x"></i> 21 <i class="y"></i> 22 <div id="target"><span class="mid">X:<span id="xt"></span> Y:<span id="yt"></span></span></div> 23 <div id="roll"></div> 24 </div> 25 <script> 26 target.addEventListener("mousedown",dragstart, false); 27 var orignX, orignY, startX, startY, targetX, targetY; 28 xt.innerHTML = target.offsetLeft - 600 + 50; 29 yt.innerHTML = target.offsetTop - 400 + 20; 30 function dragstart(e){ 31 orignX = e.clientX; 32 orignY = e.clientY; 33 startX = this.offsetLeft; 34 startY = this.offsetTop; 35 this.addEventListener("mousemove",drag, false); 36 this.addEventListener("mouseup",dragend, false); 37 } 38 function drag(e){ 39 var x = e.clientX, y = e.clientY, deltaX = e.clientX - orignX, deltaY = e.clientY - orignY; 40 this.style.left = startX + deltaX + 'px'; 41 this.style.top = startY + deltaY + 'px'; 42 xt.innerHTML = this.offsetLeft - 600 + 50; 43 yt.innerHTML = this.offsetTop - 400 + 20; 44 } 45 function dragend(){ 46 this.removeEventListener("mousemove", drag, false); 47 this.removeEventListener("mouseup", dragend, false); 48 targetX = target.offsetLeft - 600 + 50; 49 targetY = target.offsetTop - 400 + 20; 50 b = (targetY - a * targetX * targetX) / targetX; 51 shot(); 52 } 53 var frame1 = 167, a = 0.003, flag = true, b; 54 function shot(){ 55 if(!flag) return; 56 var moveX = 0, rate = targetX > 0 ? 1 : -1; 57 var step = function(){ 58 var t = 2 * a * moveX + b; 59 moveX = moveX + rate * Math.sqrt(frame1 / (t * t + 1)); 60 61 if(Math.abs(moveX) > Math.abs(targetX)){ 62 moveX = targetX; 63 } 64 var x1 = moveX, y1 = a * x1 * x1 + b * x1; 65 roll.style["transform"] = "translate(" +x1 + "px, "+ y1 +"px"+")"; 66 if(x1 !== targetX){ 67 window.requestAnimationFrame(step); 68 }else{ 69 var xx = 10; 70 } 71 }; 72 window.requestAnimationFrame(step); 73 } 74 </script> 75 </body> 76 </html>