鼠标从一个元素四周哪边进入 定位的子元素跟着从这边进来 离开也是一样的

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document change</title>
<style type="text/css">
*{margin:0px;padding:0px}
ul {list-style-type:none}
ul li,ul a,ul span {width:280px;height:180px;border-radius:20px}
ul li{float:left;overflow:hidden;margin:20px 0px 0px 20px;}
ul a{display:block;position:relative}
ul a span{position:absolute;background:url("6.png") no-repeat}
</style>
</head>
<body>
<ul>
    <li><a href="http://alisa.uehtml.com/"><img src="1.jpg" alt="" /><span> 0</span></a></li>
    <li><a href="javascript://"><img src="2.jpg" alt="" /><span> 1</span></a></li>
    <li><a href="javascript://"><img src="3.jpg" alt="" /><span> 2</span></a></li>
    <li><a href="javascript://"><img src="4.jpg" alt="" /><span> 3</span></a></li>
    <li><a href="javascript://"><img src="4.jpg" alt="" /><span> 4</span></a></li>
    <li><a href="javascript://"><img src="3.jpg" alt="" /><span> 5</span></a></li>
    <li><a href="javascript://"><img src="2.jpg" alt="" /><span> 6</span></a></li>
    <li><a href="javascript://"><img src="1.jpg" alt="" /><span> 7</span></a></li>
    <li><a href="javascript://"><img src="2.jpg" alt="" /><span> 8</span></a></li>
    <li><a href="javascript://"><img src="3.jpg" alt="" /><span> 9</span></a></li>
    <li><a href="javascript://"><img src="4.jpg" alt="" /><span> 3</span></a></li>
    <li><a href="javascript://"><img src="4.jpg" alt="" /><span> 4</span></a></li>
    <li><a href="javascript://"><img src="3.jpg" alt="" /><span> 5</span></a></li>
    <li><a href="javascript://"><img src="2.jpg" alt="" /><span> 6</span></a></li>
    <li><a href="javascript://"><img src="1.jpg" alt="" /><span> 7</span></a></li>
    <li><a href="javascript://"><img src="2.jpg" alt="" /><span> 8</span></a></li>
    <li><a href="javascript://"><img src="3.jpg" alt="" /><span> 9</span></a></li>
    <li><a href="javascript://"><img src="4.jpg" alt="" /><span> 3</span></a></li>
    <li><a href="javascript://"><img src="4.jpg" alt="" /><span> 4</span></a></li>
    <li><a href="javascript://"><img src="3.jpg" alt="" /><span> 5</span></a></li>
    <li><a href="javascript://"><img src="2.jpg" alt="" /><span> 6</span></a></li>
    <li><a href="javascript://"><img src="1.jpg" alt="" /><span> 7</span></a></li>
    <li><a href="javascript://"><img src="2.jpg" alt="" /><span> 8</span></a></li>
    <li><a href="javascript://"><img src="3.jpg" alt="" /><span> 9</span></a></li>
</ul>
<script type="text/javascript" src="jquery-1.8.3.min.js"></script>
<script type="text/javascript">
   function getpos(ev) {
        var scrolltop = document.documentElement.scrollTop || document.body.scrollTop;
        var scrollleft = document.documentElement.scrollLeft || document.body.scrollLeft;
        return {
            x: ev.clientX + scrollleft,
            y: ev.clientY + scrolltop
        }

    }
(function($,undefined){
    $('ul > li').mouseenter(function(e){
        var pos = [this.offsetLeft,this.offsetTop,getpos(e).x,getpos(e).y,this.offsetWidth,this.offsetHeight],lock = 0,px = 20,mv = $(this).find('span');
            //console.log(this.offsetWidth+"sss"+this.offsetHeight)
        if (pos[0] <= pos[2] && pos[0]+px >= pos[2] && !lock) {
            mv.css({right:pos[4]+'px',top:'0px',left:'auto',bottom:'auto'});
            lock = 1;
            mv.stop(true,false).animate({right:'0px'},300);

        }
        if (pos[0]+pos[4] >= pos[2] && pos[0]+pos[4]-px <= pos[2] && !lock) {
            mv.css({left:pos[4]+'px',top:'0px',right:'auto',bottom:'auto'});
            lock = 1;
            mv.stop(true,false).animate({left:'0px'},300);

        }
        if (pos[1] <= pos[3] && pos[1]+px >= pos[3] && !lock) {
            mv.css({bottom:pos[5]+'px',left:'0px',top:'auto',right:'auto'});
            lock = 1;
            mv.stop(true,false).animate({bottom:'0px'},300);
        }
        if (pos[1]+pos[5] >= pos[3] && pos[1]+pos[5]-px <= pos[3] && !lock) {
            mv.css({top:pos[5]+'px',left:'0px',bottom:'auto',right:'auto'});
            lock = 1;
            mv.stop(true,false).animate({top:'0px'},300);
        }
        return
    });
    $('ul > li').mouseout(function(e){
        var pos = [this.offsetLeft,this.offsetTop,getpos(e).x,getpos(e).y,this.offsetWidth,this.offsetHeight],lock = 0,px = 15,mv = $(this).find('span');
        if (pos[0] > pos[2] && !lock) {
            mv.css({top:'0px',left:'auto',bottom:'auto'});
            lock = 1;
            mv.stop(true,false).animate({right:pos[4]+'px'},300);
        }
        if (pos[0]+pos[4] <= pos[2] && !lock) {
            mv.css({top:'0px',right:'auto',bottom:'auto'});
            lock = 1;
            mv.stop(true,false).animate({left:pos[4]+'px'},300);
        }
        if (pos[1] > pos[3] && !lock) {
            mv.css({left:'0px',top:'auto',right:'auto'});
            lock = 1;
            mv.stop(true,false).animate({bottom:pos[5]+'px'},300);
        }
        if (pos[1]+pos[5]-px <= pos[3] && !lock) {
            mv.css({left:'0px',bottom:'auto',right:'auto'});
            lock = 1;
            mv.stop(true,false).animate({top:pos[5]+'px'},300);
        }
        return
    });
})(jQuery);
</script>
</body>
</html>

多些熊伟哥的帮忙 刚开始我的逻辑是通过盒子的四个角坐标进行判断,没有想到通过四个区域进行的。

另外JS只有IE支持mouseenter事件,谷歌和火狐貌似都不支持。因为mouseover会有冒泡发生,写这个效果,会有点抖,我用原生的试过了。最好用jquery来实现这个效果。

时间: 2024-10-06 06:07:40

鼠标从一个元素四周哪边进入 定位的子元素跟着从这边进来 离开也是一样的的相关文章

解决IE6,IE7下子元素使用position:relative、父元素使用overflow:auto后,子元素不随着滚动条滚动的问题

在IE6,IE7下,子元素使用position:relative.父元素使用overflow:auto后,我们预期的是滚动条滚动时,子元素也随着滚动,实际情况是内容不滚动,就感觉你是定位定在那里了. 解决办法是父元素添加position:relative样式

用 -webkit-mask-image 解决 border-radius 元素对应用了 transform 的子元素 overflow:hidden 失败的 BUG (WebKit下).

今天在网上学习的时候看到一个文章,感觉以后可能会用到,所以就COPY了过来,以便以后可以查阅,感谢 MaCheng 的分享,原文地址:http://blog.mc-zone.me/article/370 在 CSS3 的 border-radius 上能遇到很多坑.有关 Android 移动端各种兼容就不说了.最近又遇到一个 Webkit 下对于应用了transform 的子元素 overflow:hidden 失效的情况. 问题重现 在一个应用了 border-radius 的圆角元素上,加上

[ jquery 子元素选择器 总结 ] 总结: 伪类子元素选择器

总结: 伪类中的子元素选择器: 第一种类型: :first-child :last-child :nth-child() :nth-last-child() 第二种类型: :only-child :only-of-type 第三种类型: :first-of-type :nth-last-of-type() :nth-of-type() 特点: 伪类选择器很有特点: 1.位置:可以直接通过伪类选择器直接获取开始 结束 和第几个,通常和目标元素在什么位置上有关,可以从正着数,也可以从倒着数,计数从

CSS子元素居中(父元素宽高已知,子元素未知)

<style> .container{width:400px; height:400px; position:relative;} .center{position:absolute; left:0; top:0; bottom:0; right:0; margin:auto; width:50px; height:50px; //宽高可以不写 } </style> <div class="container"> <div class=&quo

div高度自适应(父元素未知,所有高度跟随子元素最大的高度)

<!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-

用XPath精确定位节点元素&amp;selenium使用Xpath定位之完整篇

在利用XSL进行转换的过程中,匹配的概念非常重要.在模板声明语句 xsl:template match = ""和模板应用语句xsl:apply-templates select = "" 中,用引号括起来的部分必须能够精确地定位节点.具体的定位方法则在XPath中给出. 之所以要在XSL中引入XPath的概念,目的就是为了在匹配XML文档结构树时能够准确地找到某一个节点元素.可以把XPath比作文件管理路 径:通过文件管理路径,可以按照一定的规则查找到所需要的文件

第一个Polymer应用 - (2)创建你自己的元素

原文链接: Step 2: Your own element翻译日期: 2014年7月6日翻译人员: 铁锚 通过上一节的学习和实践, 您已经完成了一个基本的应用程序结构(application structure),从现在开始可以构建一个标签页(card element,卡片元素)来显示名片(post).完成后的标签页包括个人头像,名字,红心按钮,以及内容区域: 图片 有点水(平?)的皮冻 在本节中,你将会创建一个 <post-card> 元素,用来控制他的子元素布局和样式, 完成后就可以像前

html事件-子元素事件不触发父元素事件

<div class="list-row" onclick="showChatDialog('dy','100000001',true);"> <img class="icon" src="/icon/default.ico" onclick="personData(event,100000001);"> <a class="nickname">dy&

【父元素parent】【子元素children】【同胞siblings】【过滤】

1.父元素 $("span").parent()           //定位到span的父元素 $("span").parents()          //定位到span的所有父元素 $("span").parents("ul")          //定位到span的ul父元素 $("span").parentsUntil("div");              //指定span