我有一个简单的(我认为)问题?
我有一个800x400的conatainer,里面是一个div 10x10。 里面的div通过按箭头键移动,但我喜欢做的是 将div保持在容器框架内。
$(document).ready(function () {
go_kw();
});
function go_kw() {
move_me();
}
function move_me() {
$(document).on('keydown', function (event) {
let key = event.which;
let qt = $('#qw');
if(key == 37){
qt.css('left', '-=1');
}else if(key == 38){
qt.css('top', '-=1');
}else if(key == 39){
qt.css('left', '+=1');
}else if(key == 40){
qt.css('top', '+=1');
}
});
}
#container {
position: relative;
border: 1px solid #000000;
width: 800px;
height: 400px;
margin: 50px auto;
}
#qw {
position: absolute;
width: 10px;
height: 10px;
top: 0;
left: 0;
background-color: #ff0000;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<div id="container">
<div id="qw"></div>
</div>
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
</body>
</html>
我的目标是尽可能简单地完成这项工作。
格尔茨!
答案 0 :(得分:0)
你可以使用Math.max(选择两个参数的最高值)和Math.min(反之亦然),就像这样(对于水平移动):
if(key == 37){
qt.css('left', Math.max(qt.css('left') - 1, 0));
}
else if(key == 39){
qt.css('left', Math.min(qt.css('left') + 1, 800));
}
答案 1 :(得分:0)
在移动parseInt(qt.css('left')) > 0
段:
$(document).ready(function () {
go_kw();
});
function go_kw() {
move_me();
}
function move_me() {
$(document).on('keydown', function (event) {
let key = event.which;
let qt = $('#qw');
if(key == 37 && parseInt(qt.css('left')) > 0){
qt.css('left', '-=1');
}else if(key == 38 && parseInt(qt.css('top')) > 0){
qt.css('top', '-=1');
}else if(key == 39 && parseInt(qt.css('left')) < 790){
qt.css('left', '+=1');
}else if(key == 40 && parseInt(qt.css('top')) < 390){
qt.css('top', '+=1');
}
});
}
&#13;
#container {
position: relative;
border: 1px solid #000000;
width: 800px;
height: 400px;
margin: 50px auto;
}
#qw {
position: absolute;
width: 10px;
height: 10px;
top: 0;
left: 0;
background-color: #ff0000;
}
&#13;
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<div id="container">
<div id="qw"></div>
</div>
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
</body>
</html>
&#13;
答案 2 :(得分:0)
最简单的方法是测试左侧和上方的位置是否优于0,右侧和下方的宽度和高度分别低于#container
。
$(document).ready(function () {
go_kw();
});
function go_kw() {
move_me();
}
function move_me() {
$(document).on('keydown', function (event) {
let key = event.which;
let qt = $('#qw');
let maxHeight = $('#container').height();
let maxWidth = $('#container').width();
if(key == 37 && qt.position().left > 0){
qt.css('left', '-=1');
}else if(key == 38 && qt.position().top > 0){
qt.css('top', '-=1');
}else if(key == 39 && qt.position().left < maxWidth){
qt.css('left', '+=1');
}else if(key == 40 && qt.position().left < maxHeight){
qt.css('top', '+=1');
}
});
}
&#13;
#container {
position: relative;
border: 1px solid #000000;
width: 800px;
height: 400px;
margin: 50px auto;
}
#qw {
position: absolute;
width: 10px;
height: 10px;
top: 0;
left: 0;
background-color: #ff0000;
}
&#13;
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<div id="container">
<div id="qw"></div>
</div>
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
</body>
</html>
&#13;
答案 3 :(得分:0)
我会创建一个带有left和top值的字段,并在更改期间检查它(我已经使容器变小以便于测试,可以在css中放大):
$(document).ready(function() {
go_kw();
});
function go_kw() {
move_me();
}
var qwWidth = $('#qw').width();
var qwHeight = $('#qw').height();
var maxLeft = $('#container').width() - qwWidth;
var maxTop = $('#container').height() - qwHeight;
var currentPos = {
left: 0,
top: 0
};
function move_me() {
$(document).on('keydown', function(event) {
let key = event.which;
if (key == 37) {
changePos('left', -1, maxLeft);
} else if (key == 38) {
changePos('top', -1, maxTop);
} else if (key == 39) {
changePos('left', 1, maxLeft);
} else if (key == 40) {
changePos('top', 1, maxTop);
}
$('#qw').css(currentPos);
});
}
function changePos(prop, changeVal, maxVal) {
var newVal = currentPos[prop] + changeVal;
if (newVal < 0) {
currentPos[prop] = 0;
} else if (newVal > maxVal) {
currentPos[prop] = maxVal;
} else {
currentPos[prop] = newVal;
}
}
#container {
position: relative;
border: 1px solid #000000;
width: 80px;
height: 40px;
margin: 50px auto;
}
#qw {
position: absolute;
width: 10px;
height: 10px;
top: 0;
left: 0;
background-color: #ff0000;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<div id="container">
<div id="qw"></div>
</div>
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
</body>
</html>