Php 基于浏览器的游戏地图
我在为基于浏览器的游戏(如Travian)创建地图时遇到了一些麻烦。我已经创建了一个功能,可以将地图拖动到不同的方向,但是每次我点击一个不同的位置,而不是我释放鼠标的位置,它会直接改变位置,然后我可以根据需要移动它。有没有办法解决这个问题?是否需要JQuery?(我不太擅长Javascript,因此我的代码可能与简单的代码处理方式有所不同) 完整文件:Php 基于浏览器的游戏地图,php,javascript,jquery,html,css,Php,Javascript,Jquery,Html,Css,我在为基于浏览器的游戏(如Travian)创建地图时遇到了一些麻烦。我已经创建了一个功能,可以将地图拖动到不同的方向,但是每次我点击一个不同的位置,而不是我释放鼠标的位置,它会直接改变位置,然后我可以根据需要移动它。有没有办法解决这个问题?是否需要JQuery?(我不太擅长Javascript,因此我的代码可能与简单的代码处理方式有所不同) 完整文件: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Map</title>
<script type="text/javascript">
//object of the element to be moved
_item = null;
//stores x & y co-ordinates of the mouse pointer
mouse_x = 0;
mouse_y = 0;
// stores top,left values (edge) of the element
mapdiv_x = 0;
mapdiv_y = 0;
//bind the functions
function move_init()
{
document.onmousemove = _move;
document.onmouseup = _stop;
}
//destroy the object when we are done
function _stop()
{
_item = null;
}
//main functions which is responsible for moving the element (div in our example)
function _move(e)
{
mouse_x = event.offsetX?(event.offsetX):event.pageX-document.getElementById("mapdiv").backgroundPositionX;
mouse_y = event.offsetY?(event.offsetY):event.pageY-document.getElementById("mapdiv").backgroundPositionY;
if(_item != null)
{
_item.style.backgroundPosition = "-" + (mouse_x - mapdiv_x) + "px -" + (mouse_y - mapdiv_y) + "px";
}
}
//will be called when use starts dragging an element
function _move_item(mapdiv)
{
//store the object of the element which needs to be moved
_item = mapdiv;
mouse_x = event.offsetX?(event.offsetX):event.pageX-document.getElementById("mapdiv").backgroundPositionX;
mouse_y = event.offsetY?(event.offsetY):event.pageY-document.getElementById("mapdiv").backgroundPositionY;
oldmapdivx = _item.style.backgroundPositionX;
oldmapdivy = _item.style.backgroundPositionY;
mapdiv_x = oldmapdivx - mouse_x;
mapdiv_y = oldmapdivy - mouse_y;
mapdivx2 = mouse_x - mapdiv_x;
mapdivy2 = mouse_y - mapdiv_y;
}
</script>
<style type="text/css">
#mapdiv {
background-image:url('images/map.png');
background-repeat:no-repeat;
background-color:#666;
width:750px;
height:500px;
cursor: move;
}
</style>
</head>
<body onload="move_init()">
<div id="mapdiv" onmousedown="_move_item(this);"></div>
</body>
</html>
地图
//要移动的元素的对象
_item=null;
//存储鼠标指针的x&y坐标
鼠标x=0;
鼠标y=0;
//存储元素的顶部、左侧值(边)
mapdiv_x=0;
mapdiv_y=0;
//绑定函数
函数move_init()
{
document.onmousemove=\u move;
document.onmouseup=\u停止;
}
//完成后,请销毁该对象
函数_stop()
{
_item=null;
}
//负责移动元素的主要函数(在我们的示例中为div)
功能(e)
{
mouse_x=event.offsetX?(event.offsetX):event.pageX document.getElementById(“mapdiv”).backgroundPositionX;
mouse_y=event.offsetY?(event.offsetY):event.pageY document.getElementById(“mapdiv”).backgroundPositionY;
如果(_item!=null)
{
_item.style.backgroundPosition=“-”+(鼠标x-mapdiv_x)+“px-”+(鼠标y-mapdiv_y)+“px”;
}
}
//将在使用开始拖动元素时调用
功能_移动_项(mapdiv)
{
//存储需要移动的元素的对象
_项目=mapdiv;
mouse_x=event.offsetX?(event.offsetX):event.pageX document.getElementById(“mapdiv”).backgroundPositionX;
mouse_y=event.offsetY?(event.offsetY):event.pageY document.getElementById(“mapdiv”).backgroundPositionY;
oldmapdivx=_item.style.backgroundPositionX;
oldmapdivy=\u item.style.backgroundPositionY;
mapdiv_x=oldmapdivx-鼠标_x;
mapdiv_y=旧MapDivy-鼠标_y;
mapdivx2=鼠标_x-mapdiv_x;
mapdivy2=鼠标_y-mapdiv_y;
}
#mapdiv{
背景图片:url('images/map.png');
背景重复:无重复;
背景色:#666;
宽度:750px;
高度:500px;
光标:移动;
}
很遗憾,我看不到您代码中的问题
不过,如果您没有死心塌地地为此编写自己的代码,那么实际上有一个非常好的Jquery插件,它可以完全满足您的需求。它被称为Overscroll(),为您提供了这样一个系统所需的所有特性。看一看,我发现它在我过去的工作中非常有用。查看代码也可以帮助您在自己的解决方案中找到问题。您永远不需要JQuery,它是用JavaScript编写的,因此您可以随时重新创建它提供给您的内容。但既然它让生活变得如此轻松,你为什么要这么做呢;您可能需要JQuery。这是一个很棒的工具,如果你刚开始使用JS,它将为你节省大量的痛苦。