`
SavageGarden
  • 浏览: 217287 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

经过图片特定区域后才触发鼠标事件如何实现?

阅读更多
   朋友问我一个问题,他设计了这样一个页面,一张图片上有些文字,然后当鼠标移到相应的文字时弹出文本框显示这些文字所对应的模块的内容。
    心想这还不简单,图片有onmouseover事件啊,在事件里写js不就搞定了吗?可是事情并不是这么简单,他那是一张大图片,是一张图片里有好多区域,只有当移到一定的区域时才能弹出文本框。上网查了查,没有现成的办法,如果图片位置不变动,可以通过得到鼠标的位置,然后确定图片上文字的位置,然后在鼠标移动时判断坐标是否已经落在文字范围之内,然后触发事件。可是,得到鼠标的位置容易,图片上文字的位置呢?
    于是朋友把文字部分切割成了小图片,实现如下,没有整理,以后有时间再说。

得到鼠标的当前坐标的JS
var mouseX;//鼠标横坐标
var mouseY;//鼠标纵坐标

//捕获鼠标坐标,方便DIV的显示
function mouseMove(ev)
{
 ev= ev || window.event;
  var mousePos = mouseCoords(ev);
  mouseX = mousePos.x;
  mouseY = mousePos.y;
}

function mouseCoords(ev)
{
 if(ev.pageX || ev.pageY){
   return {x:ev.pageX, y:ev.pageY};
 }
 return {
     x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
     y:ev.clientY + document.body.scrollTop  - document.body.clientTop
 };
}
//只要鼠标移动,就得到其坐标
document.onmousemove = mouseMove;


控制显示和隐藏DIV的鼠标事件
//根据传来的ID来显示图片对应的DIV
function mouseover(id){
    //根据ID从XML文件中读取要显示的内容
	var message=getMessageByFile(id);
	document.getElementById(id).innerHTML=message.content;
	var newsdiv=document.getElementById(id);
	newsdiv.style.visibility = 'visible';
         //使DIV显示在鼠标的右20下10处
	newsdiv.style.left =  document.body.scrollLeft+mouseX+20;
	newsdiv.style.top = document.body.scrollTop+mouseY+10;

}
//根据传来的ID来隐藏图片对应的DIV
function mouseout(id){
	document.getElementById(id).innerHTML="";
	var div=document.getElementById(id);
	div.style.visibility = 'hidden';

}


根据ID从XML文件中读取内容,及信息对象的JS
function getMessageByFile(thismessageid){
	var xml = new ActiveXObject("Microsoft.XMLDOM") ;
	xml.async="false";
	xml.load("message.xml");
	
	var mode="model";

	var maxNum=xml.getElementsByTagName(mode).length;

	var messageid="";
	var content="";
	var messageInfo = xml.getElementsByTagName(mode)[0];
	for(var i=0;i<maxNum;i++){
		if(messageInfo.getElementsByTagName("messageid")[i].firstChild){
			if(thismessageid==messageInfo.getElementsByTagName("messageid")[i].firstChild.nodeValue){
				messageid=messageInfo.getElementsByTagName("messageid")[i].firstChild.nodeValue;
				if(messageInfo.getElementsByTagName("content")[i].firstChild){
					content=messageInfo.getElementsByTagName("content")[i].firstChild.nodeValue;
				}
			}
		}
	}
	var message= new Message();
	message.messageid = messageid;
	message.content = content;
	return message;

}
//Message对象,暂给两个属性
function Message(){
    this.messageid = "";
    this.content = "";
}


XML文件
<?xml version="1.0" encoding="GB2312"?>
<message>
	<model>
		<messageid>test</messageid>
		<content>test</content>
	</model>
</message>


页面部分代码
<div>
  <img src="test.jpg" onmouseover="mouseover('test')" onmouseout="mouseout('test')"/>
  </div>
  <div id="test" style="position:absolute; width:236px; height:78px; z-index:1;visibility:hidden">
	
  </div>


好像还差个生成XML的页面,暂时就先这些吧,关键它并不是在鼠标移动到一张图片的某些区域时才触发,还得再想想。
分享到:
评论
1 楼 bbsunchen 2010-08-16  
很简单的实现方法,可以用map
http://www.w3school.com.cn/tiy/t.asp?f=jseg_imagemap

相关推荐

    javascript实现在某个元素上阻止鼠标右键事件的方法和实例

    通常我们使用阻止右键事件是在全局阻止,即在document层面就将右键拦截,现在我想要实现的效果是只在特定的区域阻止默认的右键事件,而其他区域并不影响。 通过实验我发现要是在IE下绑定的方法中return fals

    jQuery 图片浏览放大插件 ZoomImage V1.0.rar

    附加JavaScript和CSS文件到你的文档。编辑CSS文件并且 匹配你的图片路径,同时改变颜色匹配你网站的主题 重要:像例子中一样确定包含的...每个CSS类负责一个特定区域的阴影。你可以在类中改变背景图片的位置和大小。

    Windows 鼠标手势软件 StrokesPlus.net 0.4.2.4 绿色便携中文版.zip

    定义全局或应用程序级别区域,以对屏幕的不同区域中的同一区域执行不同的操作。 热键和宏 记录鼠标和键盘输入以创建可从操作调用的自定义宏。创建自定义热键以在不使用鼠标的情况下执行脚本。 插件支持 通过...

    Javascript之event大全

    _event 对象是 JavaScript 中的一个重要概念,它代表事件的状态,例如触发 event 对象的元素、鼠标的位置及状态、按下的键等等。event 对象只在事件发生的过程中才有效。event 的某些属性只对特定的事件有意义。例如...

    判断“命令按钮”是否被鼠标单击详解

    对一个控件来说,这类事件的发生是当单击控件对象的特定区域。(推荐学习:JavaScript视频教程) 通常,将一个 Click 事件过程附加到一个 CommandButton 控件,Menu 对象或 PictureBox 控件上用来执行命令或类似命令...

    经典网页特效500例打包下载

    经典网页特效500例!绝对500例! 经不经典你说了算! 一起一直自己用,现在贡献出来! QQ式的导航 ...特定区域文字控制 自动跳转文本 限定选择文件的类型 大段文字的滚动处理 ............. .............

    屏幕取色器ScreenColorPicker

    1.屏幕区域选择:允许用户在屏幕上选择感兴趣的区域,通常通过拖动鼠标来选择区域。 2.颜色采样:捕捉选定区域内的颜色,并显示该颜色的RGB值或十六进制表示。 3.支持多种颜色格式:通常可以选择不同的颜色表示...

    VC++常用功能实例

    ◆如何使用postmessage来异步触发某事件◆ 21 ◆如何使用Sendmessage来异步触发某事件◆ 22 ◆如何修改父类的相关控件属性◆ 22 ◆如何在程序中得到控件的名◆ 22 ◆如何控制菜单的事件程序◆ 22 ◆如何使用控件中的...

    VC++常用的共用函数100多页

    ◆如何使用postmessage来异步触发某事件◆ 21 ◆如何使用Sendmessage来异步触发某事件◆ 22 ◆如何修改父类的相关控件属性◆ 22 ◆如何在程序中得到控件的名◆ 22 ◆如何控制菜单的事件程序◆ 22 ◆如何使用控件中的...

    API之网络函数---整理网络函数及功能

    GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置 GetMessageTime 取得消息队列中上一条消息处理完毕时的时间 PostMessage 将一条消息投递到指定窗口的消息队列 PostThreadMessage 将一条...

    PT80-NEAT开发指南v1.1

    事件驱动和消息响应机制 ..................................................................................................................... 17 建立一个应用程序 ..........................................

    经典网页特效500例源代码整理

    QQ式的导航经典实用的触发型导航菜单菜单变换与拖动三级下拉菜单(通用版)鼠标触及带边框菜单HTML输出下拉内容判断输入是否填全特定区域文字控制自动跳转文本限定选择文件的类型大段文字的滚动处理

    70款经典Dreamweaver插件

    FlashImage 响应鼠标事件的图片渐显渐隐效果 real_networks 在页面中插入流式播放的Real视频和音频文件 MX131662_pdreloadxtension 从新加载Dreamweaver的各项插件,不用重复的启动关闭Dreamweaver了 DateStamp 插入...

    Dreamweaver 插件集

    响应鼠标事件的图片渐显渐隐效果 real_networks 在页面中插入流式播放的Real视频和音频文件 MX131662_pdreloadxtension 从新加载Dreamweaver的各项插件,不用重复的启动关闭Dreamweaver了 DateStamp 插入一个日期,...

    El Inputte for .NET---最新标准的输入界面控件

    能够根据其它控件的大小自动优化调整尺寸以外,并能设置输入区域水平和垂直方向上上下左右配置的间隔。 ADO.NET连接 支持.NET Framework提供的ADO.NET连接;充分利用强大的ADO.NET功能,构建真正的数据库输入前端...

    xheditor-1.1.14

    方法2:利用xhEditor提供的jQuery插件接口来实现对特定textarea的初始化和传递参数,例: $('#elm1').xheditor(); 或者 $('#elm1').xheditor({tools:'mini'}); 特别说明:两种初始化方法只能选择其中一种使用,如果...

    VBA常用技巧

    技巧49 打印预览时不触发事件 12 技巧50 设置工作簿文档属性信息 12 技巧51 不打开工作簿取得其他工作簿数据 12 51-1 使用公式 12 51-2 使用GetObject函数 12 51-3 隐藏Application对象 12 51-4 使用ExecuteExcel4...

Global site tag (gtag.js) - Google Analytics