- 主题:mouseout/in和嵌套的div。。。 (转载)
【 以下文字转载自 WebDev 讨论区 】
发信人: KDr2 (Killy Draw), 信区: WebDev
标 题: mouseout/in和嵌套的div。。。
发信站: 水木社区 (Fri Jun 15 14:18:55 2007), 站内
<div id="d1"> blabla <div id="d2"> hehehe </div></div>
设置d1的mouseout事件为d1隐藏,想鼠标在d1区域内(为d2的父集)的时候d1都能看得见
在d1外时d1消失
现在的状况是从d1进入d2的时候 d1也消失,设置了d1的z-index大于d2的也没用,大家怎么解决这个问题?
--
FROM 211.157.118.*
在d1的mouseover事件上使d1为可见即可。
【 在 KDr2 (Killy Draw) 的大作中提到: 】
: 【 以下文字转载自 WebDev 讨论区 】
: 发信人: KDr2 (Killy Draw), 信区: WebDev
: 标 题: mouseout/in和嵌套的div。。。
: 发信站: 水木社区 (Fri Jun 15 14:18:55 2007), 站内
: <div id="d1"> blabla <div id="d2"> hehehe </div></div>
: 设置d1的mouseout事件为d1隐藏,想鼠标在d1区域内(为d2的父集)的时候d1都能看得见
: 在d1外时d1消失
: 现在的状况是从d1进入d2的时候 d1也消失,设置了d1的z-index大于d2的也没用,大家怎么解决这个问题?
--
FROM 211.167.69.*
只要判断onmouseout的时候鼠标指针是不是还在div内部就是了。
如果div是relative的,可以用
function fGetXY(aTag)
{
//alert(aTag.parentNode);
var oTmp = aTag;
var pt = new Point(0,0);
do
{
pt.x += oTmp.offsetLeft;
pt.y += oTmp.offsetTop;
oTmp = oTmp.parentNode;
} while(oTmp.tagName!="BODY");
return pt;
}
//存放x,y坐标
function Point(iX, iY)
{
this.x = iX;
this.y = iY;
}
来获得这个div左上角的绝对坐标。然后再求出其余三个点的绝对坐标。让event对象的x,y跟这四个坐标比一比看出去没有,就知道了。
【 在 KDr2 (Killy Draw) 的大作中提到: 】
: 发信人: KDr2 (Killy Draw), 信区: WebDev
: 标 题: mouseout/in和嵌套的div。。。
: 发信站: 水木社区 (Fri Jun 15 14:18:55 2007), 站内
: ...................
--
FROM 207.46.92.*
这个效率太低了吧,而且div不是relative的咋办,在resize上再挂一个?
【 在 hawkgao (红旗) 的大作中提到: 】
: 只要判断onmouseout的时候鼠标指针是不是还在div内部就是了。
: 如果div是relative的,可以用
: function fGetXY(aTag)
: {
: //alert(aTag.parentNode);
: var oTmp = aTag;
: var pt = new Point(0,0);
: do
: {
: pt.x += oTmp.offsetLeft;
: pt.y += oTmp.offsetTop;
: oTmp = oTmp.parentNode;
: } while(oTmp.tagName!="BODY");
: return pt;
: }
: //存放x,y坐标
: function Point(iX, iY)
: {
: this.x = iX;
: this.y = iY;
: }
: 来获得这个div左上角的绝对坐标。然后再求出其余三个点的绝对坐标。让event对象的x,y跟这四个坐标比一比看出去没有,就知道了。
--
FROM 211.167.69.*
这种需要bubble处理
【 在 KDr2 (Killy Draw) 的大作中提到: 】
: 【 以下文字转载自 WebDev 讨论区 】
: 发信人: KDr2 (Killy Draw), 信区: WebDev
: 标 题: mouseout/in和嵌套的div。。。
: ...................
--
FROM 211.151.91.*
function fGetXY(aTag)
{
//alert(aTag.parentNode);
var oTmp = aTag;
var pt = new Point(0,0);
do
{
pt.x += oTmp.offsetLeft;
pt.y += oTmp.offsetTop;
oTmp = oTmp.parentNode;
~~~~~~~~~~~~~~~~~~~~~~//一直不停往parent遍历,累加值
} while(oTmp.tagName!="BODY");//这里好像有点问题,还要加判断条件oTmp.style.position!="absolute"
return pt;
}
【 在 sayinger (言者) 的大作中提到: 】
: 这个效率太低了吧,而且div不是relative的咋办,在resize上再挂一个?
--
FROM 207.46.92.*
如果窗体发生变化,岂不是要重算,不会每次mouseout的时候都重算吧,那效率实在是。。。
其实针对楼主的需求只要在d1的mouseover里加上让d1不隐藏就行了
【 在 hawkgao (红旗) 的大作中提到: 】
: function fGetXY(aTag)
: {
: //alert(aTag.parentNode);
: ...................
--
FROM 211.167.69.*
里面的子div多了就麻烦了
【 在 roy (大饼:己所不欲,勿施于人) 的大作中提到: 】
: 这种需要bubble处理
--
FROM 207.46.92.*
呵呵,重算就是了,只要层数不深没啥效率问题。
【 在 sayinger (言者) 的大作中提到: 】
: 如果窗体发生变化,岂不是要重算,不会每次mouseout的时候都重算吧,那效率实在是。。。
: 其实针对楼主的需求只要在d1的mouseover里加上让d1不隐藏就行了
--
修改:hawkgao FROM 207.46.92.*
FROM 207.46.92.*
随手写的,仅供参考
<html>
<head>
<title>test</title>
<style>
.big{
height:300px;
width:800px;
border:dashed;
}
.little{
height:100px;
width:100px;
left:200px;
border:dashed;
}
</style>
<script type="text/javascript">
var inBig = false;
var inLittle = false;
function littleIn()
{
debug("in littleIn!");
inLittle = true;
inBig = true;
setStatus();
}
function littleOut()
{
debug("in littleOut!");
inLittle = false;
inBig = true;
setStatus();
}
function bigIn()
{
debug("in bigIn!");
inBig = true;
setStatus();
}
function bigOut()
{
debug("in bigOut");
inBig = false;
setStatus();
}
function setStatus()
{
var status = document.getElementById("status");
status.innerHTML="";
status.innerHTML="is mouse in the big div? "+ inBig;
status.innerHTML+="<br />is mouse in the little div? "+ inLittle;
if(inBig)
{
document.getElementById("big").style.opacity=0.4;
}
else
{
document.getElementById("big").style.opacity=1;
}
}
function debug(msg)
{
var debug = document.getElementById("debug");
debug.innerHTML+="<br />"+msg;
}
</script>
</head>
<body>
something before the big div
<div class="big" id="big" onmouseover="bigIn()" onmouseout="bigOut()">
something before the little div
<div class="little" onmouseover="littleIn()" onmouseout="littleOut()">
something in the little div
</div>
something after the little div
</div>
something after the big div
<div style="border:dotted">
this is the status console
<div id="status">
</div>
this is the debug console
<div id="debug">
</div>
</div>
</body>
</html>
【 在 KDr2 (Killy Draw) 的大作中提到: 】
: 【 以下文字转载自 WebDev 讨论区 】
: 发信人: KDr2 (Killy Draw), 信区: WebDev
: 标 题: mouseout/in和嵌套的div。。。
: ...................
--
FROM 202.108.12.*