这个项目涉及在LAN上控制玩具车。
在我的HTML页面上,有5个"按钮";向上,向下,向左,右,停止。我的代码工作是这样的:说用户单击"向上",将一个值发送到PHP页面以进行处理,并且已处理的字符串被打印在另一个PHP页面上,以供Arduino读取。
要使汽车停止,用户必须点击停止。
<html>
<head>
</head>
<form name="motorform" action="motorboardprocess.php" method="post">
<tr><p align='center'><font face="BN machine" size="6" color="royalblue">Motor Shield</font></tr>
<tr>
<input id="forward" type="image" src="up.png" name="forward">
</tr>
<tr>
<input id="left" type="image" src="left.png" name="left">
<input id="stop"type="image" src="stop.png" name="stop">
<input id="right" type="image" src="right.png" name="right">
</tr>
<tr>
<input id="backward" type="image" src="down.png" name="backward">
</tr>
</form>
</body>
</html>
和所述php ...
<?php
if (isset($_POST['forward_x'], $_POST['forward_y'])){
$myFile = "mtboardcom.php";
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = "<?phpn";
fwrite($fh, $stringData);
$stringData = "echo ".'"<forward>"'."n";
fwrite($fh, $stringData);
$stringData = "?>n";
fwrite($fh, $stringData);
fclose($fh);
}
else if (isset($_POST['left_x'], $_POST['left_y'])){
$myFile = "mtboardcom.php";
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = "<?phpn";
fwrite($fh, $stringData);
$stringData = "echo ".'"<left>"'."n";
fwrite($fh, $stringData);
$stringData = "?>n";
fwrite($fh, $stringData);
fclose($fh);
}
//and so on.....
arduino读取:
<?php
echo "<forward>"
?>
所以问题是,如何利用jQuery的mousedown
和mouseup
事件要删除停止"按钮"。
或其他情况:用户按钮按钮移动汽车并释放按钮以停止汽车。
在mousedown
上,Arduino读取字符串'forward'
。
mouseup
在同一按钮上,字符串 'stop'
由arduino读取。
当然,您可以在JavaScript中订阅两个不同的事件。只是挂上事件:
var field = document.getElementsById('#idName');
field.onmousedown = function(){
}
field.onmouseup = function(){
}
或jQuery:
var field = $('#idName');
field.mousedown(function(){
}).mouseup(function(){
});
您可以使用以下jQuery代码。在这里添加了一个演示
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<div id='btn' style='width:50px;height:30px;background-color:red'>Click</div>
<div id='log'></div>
<script>
$("#btn").mouseup(function(){
$('#log').append('<span style="color:#F00;">Mouse up.</span>');
}).mousedown(function(){
$('#log').append('<span style="color:#00F;">Mouse down.</span>');
});
</script>
</body>
</html>
是的,您可以同时捕获Mousedown和MouseUp事件,但是您需要使用Ajax调用将信息发送到服务器,以便您不做重新加载页面的寄回。
另外,您不会自动获得与每个Mousedown事件相对应的MouseUP事件。用户可能在释放按钮之前将鼠标移到按钮外面,甚至将其移至其他按钮。您应该将哪个按钮存储在JavaScript变量中,并捕获整个页面的MouseUp事件,而不是为按钮,如果上次点击在按钮上,请发送停止信号。
使用jQuery,这很简单:
$('#element').mousedown(function (event) {
// process mouse down
});
$('#element').mouseup(function (event) {
// process mouse up
});
您也可以用
将它们链$('#element').mousedown(function(event) {
/* code */
}).mouseup(function (event) {
/* code */
});
在这些事件中,您可以使用$.ajax
调用ping URL。但是请注意,由于Ajax是异步的,因此,如果您不小心,您可能会看比赛条件。因为他们来自1个客户,所以您应该没问题,但是还有其他问题可能会导致较小的延迟或响应时间差异。