核心提示:效果预览: html部分:p class=box1h1使用方向键控制图形的移动;br使用ctrl + +/-控制图形的大小;brctrl +1/2/3/4/5/6/7改变p的颜色(共七种颜色);br/...
效果预览:

html部分:
<p class="box1"> <h1> 使用方向键控制图形的移动;<br> 使用ctrl + “+/-”控制图形的大小;<br> ctrl +1/2/3/4/5/6/7改变p的颜色(共七种颜色);<br> </h1> <p id="btn"> 重置 </p> </p> <p id="box2"> <p id="p1"></p> </p>
css部分:
<style> .box1{ height: 200px; text-align: center; } h1{ font: 500 15px/20px 宋体; color: #971b2b; } #btn { height: 30px; width: 70px; line-height: 30px; text-align: center; background: #e4b43e; color: #ffffff; cursor: pointer; display: inline-block; } #btn:hover{ background: #daa20f; } #box2{ height: 700px; width: 100%; position: relative; border: 1px solid #888888; } #p1{ height: 50px; width: 50px; position: absolute; background: #29b3ee; } </style>
javascript部分:
<script> window.onload = function () { var oDiv = document.getElementById('p1'); var oBox2 = document.getElementById('box2'); var oBtn = document.getElementById('btn'); var oWidth = parseInt(getStyle(oBox2, 'width')); var aColor = ['red','orange','yellow','green','cyan','blue','purple']; // 方向键控制图形的移动方向 //// 第一种方法:图形正在移动时会有间隔 不流畅 // // document.onkeydown = function (ev) { // var ev = ev||event; // // switch (ev.keyCode){ // case 37: // oDiv.style.left = oDiv.offsetLeft - 10 + 'px'; // break; // case 38: // oDiv.style.top = oDiv.offsetTop - 10 + 'px'; // break; // case 39: // oDiv.style.left = oDiv.offsetLeft + 10 + 'px'; // break; // case 40: // oDiv.style.top = oDiv.offsetTop + 10 + 'px'; // break; // } // rangeFn(); // // } //第二种方法 采用定时器解决图形移动不流畅的问题 var key = {l: null, r: null, t: null, b: null}; setInterval(function () { if (key.l) { oDiv.style.left = oDiv.offsetLeft - 5 + 'px'; } if (key.r) { oDiv.style.left = oDiv.offsetLeft + 5 + 'px'; } if (key.b) { oDiv.style.top = oDiv.offsetTop + 5 + 'px'; } if (key.t) { oDiv.style.top = oDiv.offsetTop - 5 + 'px'; } rangeFn(); }, 13) document.onkeydown = function (ev) { var ev = ev || event; var oDivHeight = parseInt( getStyle(oDiv,'height') ); var oDivWidth =parseInt( getStyle(oDiv,'width') ); switch (ev.keyCode) { case 37 : key.l = true; break; case 38 : key.t = true; break; case 39 : key.r = true; break; case 40 : key.b = true; break; // ctrl +1/2/3/4/5/6/7改变p的颜色 case 49: ev.ctrlKey && ( oDiv.style.background = aColor[0] ); break; case 50: ev.ctrlKey && ( oDiv.style.background = aColor[1] ); break; case 51: ev.ctrlKey && ( oDiv.style.background = aColor[2] ); break; case 52: ev.ctrlKey && ( oDiv.style.background = aColor[3] ); break; case 53: ev.ctrlKey && ( oDiv.style.background = aColor[4] ); break; case 54: ev.ctrlKey && ( oDiv.style.background = aColor[5] ); break; case 55: ev.ctrlKey && ( oDiv.style.background = aColor[6] ); break; //ctrl + +/-改变p的大小 case 187: if (ev.ctrlKey) { oDiv.style.width = oDivWidth + 10 + "px"; oDiv.style.height = oDivHeight + 10 + "px"; } break; case 189: if (ev.ctrlKey) { oDiv.style.width = oDivWidth - 10 + "px"; oDiv.style.height = oDivHeight - 10 + "px"; } break; } //阻止浏览器的默认行为 return false }; document.onkeyup = function (ev) { var ev = ev || event; switch (ev.keyCode) { case 37 : key.l = false; break; case 38 : key.t = false; break; case 39 : key.r = false; break; case 40 : key.b = false; break; } }; //重置 oBtn.onclick = function () { oDiv.style.background = '#29b3ee'; oDiv.style.width = '50px'; oDiv.style.height = '50px'; oDiv.style.left = '0'; oDiv.style.top = '0'; }; //控制图形移动的范围的函数 function rangeFn() { if (parseInt(oDiv.style.left) < 0){ oDiv.style.left = '0px'; } if (parseInt(oDiv.style.top) < 0){ oDiv.style.top = '0px'; } if (parseInt(oDiv.style.top) > 650){ oDiv.style.top = '650px'; } if ( parseInt(oDiv.style.left) > oWidth-50 ){ oDiv.style.left = oWidth - 50 + 'px'; } } function getStyle(obj, attr) { return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj)[attr]; } } </script>
总结:
想了好久还是解决不了控制元素大小的范围的问题。