JQuery仿购物网站放大镜特效所遇问题及思考

    先贴下效果图,然后描述起来也就不会不知道我在说什么了。

           

    我碰到的问题一: 一开始我自己总结了是因为两个小原因导致的①使用了mouseover,mouseout事件②因为层叠样式(z-index)的原因。一开始的HTML结构如图:

 <ul>
<li class="first">
<img src="./image/ep.jpg" alt="">
<div class="tipbox"></div>
</li>
<div class="firBox">
<img src="./image/ep.jpg" alt="">
</div>
</ul>

    我的思路是:一开始.firBox,  .tipbox是隐藏的,当鼠标mouseover到li元素时,出现放大镜(.tipbox)和相应的放大区域(.firBox);而鼠标mouseout出li元素时,则隐藏二者。问题就出在这里了,我鼠标移动到li元素中,放大镜出现后就会莫名奇妙的消失了。然后我分析了是因为层叠样式导致的(并没有深刻理解mouseover,mouseout会冒泡,移入移出子元素也会触发mouseover,mouseout事件)。为搞清楚触发的顺序和层叠样式产生的影响,我参考了W3C的mouseover,mouseenter的区别例子,并在原来代码的基础上进行了测试。得出了结论:① 不论子元素的层叠样式多大,mouseover,mouseout在子元素还是会触发,而mouseenter,mouseleave在子元素还是不会触发。②若从父元素到子元素则会触发父元素的mouseout事件再触发子元素的mouseover事件,若从子元素到父元素则会触发子元素的mouseout事件再出来子元素的mouseover事件。贴出我改动的代码,感兴趣的可以按照自己需求改,得出自己的结论。

 <html>
<head>
<style>
.over > h2 {
position: absolute;
z-index: 10;
display: none;
}
.enter > h2{
position: absolute;
z-index: 10;
}
</style>
<script type="text/javascript" src="/jquery/jquery.js"></script>
<script type="text/javascript">
x=0;
y=0;
$(document).ready(function(){
$("div.over").mouseover(function(e){
$("div.over").find("h2").css('display', 'block');
$(".over span").text(x+=1);
alert('over'+ e.target);
});
$("div.over").mouseout(function(e) {
$("div.over").find("h2").css('display', 'none');
alert('out'+e.target);
});
$("div.enter").mouseenter(function(){
$(".enter span").text(y+=1);
alert('enter');
});
$("div.enter").mouseleave(function(){
alert('leave');
})
});
</script>
</head>
<body>
<p>不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件。</p>
<p>只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件。</p>
<div class="over" style="background-color:lightgray;padding:20px;width:40%;float:left;height: 100px">
<h2 style="background-color:white;height: 90px;">被触发的 Mouseover 事件:<span></span></h2>
</div>
<div class="enter" style="background-color:lightgray;padding:20px;width:40%;float:right;height: 100px">
<h2 style="background-color:white;">被触发的 Mouseenter 事件:<span></span></h2>
46 </div>
</body>
</html>

    最后我得出了结论是因为事件的冒泡导致的,和层叠颜样式并无关系。然后我进行了改进使用一个空的透明DIV,宽高与li元素一样大小,覆盖在其上,z-index为2,.tipbox的z-index为1。最后对空的透明DIV使用JQ的hover()方法和mousemove()方法可完美解决。(注意:hover()方法是用来替代mouseenter,mouseleaver事件的,因此没有冒泡存在).

   HTML结构:

 <ul>
<li class="first">
<img src="./image/ep.jpg" alt="">
<!-- 空的透明DIV -->
<div class="zzc"></div>
<div class="tipbox"></div>
</li>
<div class="firBox">
<img src="./image/ep.jpg" alt="">
</div>
</ul>

    .zzc的CSS样式:

 .zzc {
width: 100%;
height: 100%;
left:;
top:;
z-index:;
cursor: crosshair;
}

    .tipbox的CSS样式:

.tipbox {
width: 80px;
height: 60px;
bottom:;
left:;
background: rgba(0,0,0,0.5);
display: none;
z-index:;
}

    看来虽然内容不多,但是在第一次做的过程中还是躺了,然后各种找办法解决。分析完且解决完后有稍微记录了下大概是什么问题,问题出在哪里。但是有了一点知识的沉淀后,你再去看,再分析,再去测试会发现不同的东西,推翻以前的结论,往深处又走了一步,这时候我感觉我获得的成就感会是double,  这是我这次记录所获得的最大感受。

JQuery仿购物网站放大镜特效所遇问题及思考的更多相关文章

  1. 基于jquery仿360网站图片选项卡切换代码

    今天给大家分享一款基于jquery仿360网站图片选项卡切换代码.这款实例适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗.效果图如下: 在线预 ...

  2. 基于jQuery仿淘宝产品图片放大镜特效

    在开发商城的时候,往往会用到图片的放大功能,这里把自己在近期项目中使用的放大镜特效做一下总结(非插件). 放大镜效果 常用的js组件jquery.imagezoom,jquery.jqzoom,jqu ...

  3. 一款仿PBA官网首页jQuery焦点图的切换特效

    一款仿PBA官网首页jQuery焦点图的切换特效,非常的简单大方, 在对浏览器兼容性的方面做了不少的功夫.IE6也勉强能过去. 还是一款全屏的焦点图切换特效.大气而清新.很适合简介大方的网站. 下图还 ...

  4. 一款jQuery仿海尔官网全屏焦点图特效代码

    一款jQuery仿海尔官网全屏焦点图特效代码,带有左右箭头的jQuery焦点图切换特效. 当焦点图切换时,下方的三块小图也相对应的进行切换.并且特效还兼容头疼的IE6.赶快去和谐了它吧! 适用浏览器: ...

  5. 基于jQuery适合做图片类网站的特效

    分享一款基于jquery适合做图片类网站的特效.这是一款鼠标经过图片滑动弹出标题效果代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="c ...

  6. 基于jQuery仿迅雷影音官网幻灯片特效

    分享一款基于jQuery仿迅雷影音官网幻灯片特效迅.雷影音官网jQuery幻灯片特效是一款带左右箭头,索引按钮切换的jQuery幻灯片代码.效果图如下: 在线预览   源码下载 实现的代码. html ...

  7. 20款jquery下拉导航菜单特效代码分享

    20款jquery下拉导航菜单特效代码分享 jquery仿京东商城左侧分类导航下拉菜单代码 jQuery企业网站下拉导航菜单代码 jQuery css3黑色的多级导航菜单下拉列表代码 jquery响应 ...

  8. 基于jQuery加入购物车飞入动画特效

    基于jQuery加入购物车飞入动画特效.这是一款电商购物网站常用的把商品加入购物车代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div id="main& ...

  9. jquery仿搜狐投票动画代码

    体验效果:http://hovertree.com/texiao/jquery/21/ 这是一款基于jquery实现的仿搜狐投票动画特效源码,运行该源码可见VS图标首先出现在中间位置,紧接着随着投票比 ...

随机推荐

  1. Leetcode821.Shortest Distance to a Character字符的最短距离

    给定一个字符串 S 和一个字符 C.返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组. 示例 1: 输入: S = "loveleetcode", C ...

  2. js(jquery)鼠标移入移出事件时,出现闪烁、隐藏显示隐藏显示不停切换的情况

    <script> $(".guanzhu").hover(function(){ $(".weixinTop").show(); },functio ...

  3. Effective Modern C++:06lambda表达式

    lambda表达式实际上是语法糖,任何lambda表达式能做到的,手动都能做到,无非是多打几个字.但是lambda作为一种创建函数对象的手段,实在太过方便,自从有了lambda表达式,使用复杂谓词来调 ...

  4. vagrant up提示"Couldn't open file /path/to/base"的错误解决方法

    在vagrant使用命令vagrant up启动虚拟机时 出错: C:\Vagrant>vagrant up Bringing machine 'default' up with 'virtua ...

  5. 【Leetcode链表】旋转链表(61)

    题目 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出: ...

  6. Kubernetes1.3新特性:rktnetes

    (一)  背景资料 对于Kubernetes来说,从架构设计上就是支持Docker和CoreOS rkt两种容器的,在1.2版本中,最低支持CoreOS rkt 0.13.0版本,这个rkt版本算是一 ...

  7. phpexcel使用说明5----ThinkPHP+PHPExcel[导入][导出]实现方法

    转自:http://www.thinkphp.cn/code/403.html实现步骤: 注意:phpexcel必须是1.78版本的,不能用1.8以上的 一:去官网http://phpexcel.co ...

  8. 初始化Redis密码

    在配置文件/etc/redis/redis.conf中有个参数: requirepass 这个就是配置redis访问密码的参数: 比如 requirepass test123: (需重启Redis才能 ...

  9. 巨蟒python全栈开发-第11阶段 ansible_project3

    今日大纲: 1.用户创建 2.前端优化 3.用户编辑 4.用户删除 5.ansible api介绍 1.用户创建 新建一个user_create.html的页面 <form class=&quo ...

  10. Hbase API: 读Bigtable