我有一个用gdimage创建的图像,它有40000个5x5块链接到不同的用户配置文件,我希望当你将鼠标悬停在其中一个块上时,AJAX将通过检测x和来从数据库中获取该配置文件当它移动到图像上时,它会合作。
然后单击它时,它获取的信息链接到该用户配置文件。
这是我到目前为止所得到的:
的Javascript / jQuery的:
<script type="text/javascript">
jQuery.fn.elementlocation = function() {
var curleft = 0;
var curtop = 0;
var obj = this;
do {
curleft += obj.attr('offsetLeft');
curtop += obj.attr('offsetTop');
obj = obj.offsetParent();
} while ( obj.attr('tagName') != 'BODY' );
return ( {x:curleft, y:curtop} );
};
$(document).ready( function() {
$("#gdimage").mousemove( function( eventObj ) {
var location = $("#gdimage").elementlocation();
var x = eventObj.pageX - location.x;
var x_org = eventObj.pageX - location.x;
var y = eventObj.pageY - location.y;
var y_org = eventObj.pageY - location.y;
x = x / 5;
y = y / 5;
x = (Math.floor( x ) + 1);
y = (Math.floor( y ) + 1);
if (y > 1) {
block = (y * 200) - 200;
block = block + x;
} else {
block = x;
}
$("#block").text( block );
$("#x_coords").text( x );
$("#y_coords").text( y );
$.ajax({
type: "GET",
url: "fetch.php",
data: "x=" + x + "&y=" + y + "",
dataType: "json",
async: false,
success: function(data) {
$("#user_name_area").html(data.username);
}
});
});
});
</script>
PHP:
<?
require('connect.php');
$mouse_x = $_GET['x'];
$mouse_y = $_GET['y'];
$grid_search = mysql_query("SELECT * FROM project WHERE project_x_cood = '$mouse_x' AND project_y_cood = '$mouse_y'") or die(mysql_error());
$user_exists = mysql_num_rows($grid_search);
if ($user_exists == 1) {
$row_grid_search = mysql_fetch_array($grid_search);
$user_id = $row_grid_search['project_user_id'];
$get_user = mysql_query("SELECT * FROM users WHERE user_id = '$user_id'") or die(mysql_error());
$row_get_user = mysql_fetch_array($get_user);
$user_name = $row_get_user['user_name'];
$user_online = $row_get_user['user_online'];
$json['username'] = $user_name;
echo json_encode($json);
} else {
$json['username'] = $blank;
echo json_encode($json);
}
?>
HTML
<div class="tip_trigger" style="cursor: pointer;">
<img src="gd_image.php" width="1000" height="1000" id="gdimage" />
<div id="hover" class="tip" style="text-align: left;">
Block No. <span id="block"></span><br />
X Co-ords: <span id="x_coords"></span><br />
Y Co-ords: <span id="y_coords"></span><br />
User: <span id="user_name_area"> </span>
</div>
</div>
现在,来自mousemove位置的'block','x_coords'和'y_coords'变量工作正常并显示在span标签中,但是它没有从AJAX函数中获取PHP变量,我无法理解为什么。
我也不知道如何制作它,所以当点击鼠标时,它会从fetch.php获取变量,并将用户引导到诸如“/ user / view /?id = VAR_ID_NUMBER”之类的页面
我是以错误的方式接近这个,还是做错了?有人可以帮忙吗? :)
答案 0 :(得分:3)
请参阅有关不的评论,每次鼠标移动都要进行抓取。糟糕的坏主意。使用一些限制。
那说,问题是,你没有在成功函数中以任何方式使用结果。
您的PHP函数不会向浏览器返回任何内容。 PHP变量不会神奇地变得可用于客户端JavaScript。 PHP只是运行,生成一个HTML页面作为输出,并将其发送到浏览器。然后,浏览器会根据需要解析发送给它的信息。
您需要修改fetch.php以使用您需要的数据生成一些格式正确的JSON字符串。它看起来像{ userid: 2837 }
。例如,尝试:
echo "{ userid: $user_id, username: $user_name }";
在你的成功回调中,jQuery将传递给该函数的第一个参数将是解析(希望格式正确的)JSON结果的结果,以便它成为一个合适的JavaScript对象。然后,在成功回调中,您可以使用结果,例如:
//data will contain a JavaScript object that was generate from the JSON
//string the fetch.php produce, *iff* it generated a properly formatted
//JSON string.
function(data) {
$("#user_id_area").html(data.user_id);
}
修改HTML示例,如下所示:
User ID: <span id="user_id_area"> </span>
showHover是一个实际显示悬停的辅助函数。
以下是限制mousemove功能的模式:
jQuery.fn.elementlocation = function() {
var curleft = 0;
var curtop = 0;
var obj = this;
do {
curleft += obj.attr('offsetLeft');
curtop += obj.attr('offsetTop');
obj = obj.offsetParent();
} while ( obj.attr('tagName') != 'BODY' );
return ( {x:curleft, y:curtop} );
};
$(document).ready( function() {
var updatetimer = null;
$("#gdimage").mousemove( function( eventObj ) {
clearTimer(updatetimer);
setTimeout(function() { update_hover(eventObj.pageX, eventObj.pageY); }, 500);
}
var update_hover = function(pageX, pageY) {
var location = $("#gdimage").elementlocation();
var x = pageX - location.x;
var y = pageY - location.y;
x = x / 5;
y = y / 5;
x = (Math.floor( x ) + 1);
y = (Math.floor( y ) + 1);
if (y > 1) {
block = (y * 200) - 200;
block = block + x;
} else {
block = x;
}
$("#block").text( block );
$("#x_coords").text( x );
$("#y_coords").text( y );
$.ajax({
type: "GET",
url: "fetch.php",
data: "x=" + x + "&y=" + y + "",
dataType: "json",
async: false,
success: function(data) {
//If you're using Chrome or Firefox+Firebug
//Uncomment the following line to get debugging info
//console.log("Name: "+data.username);
$("#user_name_area").html(data.username);
}
});
});
});
答案 1 :(得分:0)
你能告诉我们PHP代码吗?您是否在返回数据上使用json_encode
?
另一种方法是简单地将图像作为<div>
容器的背景,并在<a>
中安排<div>
元素,然后只需将jQuery绑定到其单击处理程序
如果浏览器不支持jQuery或javascript,这也有好处,因为您实际上可以在锚点的HREF
属性中放置所需的URL。这样,如果没有启用jQuery,链接将正常加载。
骨架实现如下所示:
CSS示例
#imagecontainer {
background-image: url('gd_image.php');
width: 1000px;
height: 1000px;
position: relative;
}
#imagecontainer a {
height: 100px;
width: 100px;
position: absolute;
}
#block1 {
left: 0px;
top: 0px;
}
#block2 {
left: 100px;
top: 0px;
}
示例HTML
<div id="imagecontainer">
<a href="" id="block1"></a>
<a href="" id="block2"></a>
</div>
示例jQuery
$(document).ready(function(){
$("#block1").click(function(){ /* do what you need here */ });
});