jQuery滚动广告 解决子div绝对定位与父div重叠引起的闪烁问题

这两天做了一个滚动广告栏的demo 功能有自动轮播 左右箭头移动 导航点选中图片移动效果 模仿的是新浪体育的广告

最难的问题就是子div绝对定位于父div 鼠标移入子div 系统会判定鼠标移出了父div 所以会触发子div消失的效果 消失完因为鼠标在父div中 所以又触发了子div出现的效果

这样就会导致子div一直重复消失出现 形成闪烁的效果 在网上没有找到合适的解决问题办法 我通过设定状态和js的setTimeout解决了此问题

效果如图

需要设定两个状态

var arrow = false; //判断是否进入了箭头区域
var isDiv = false;//判断是否进入了父div

附上关键代码

 1 $("#content").mouseenter(function () {
 2                 if ($("#left").is(":animated") || $("#right").is(":animated"))//当箭头处于动画时 不执行鼠标移入事件
 3                 {
 4                     return false;//防止鼠标一直进出导致的动画累计
 5                 }
 6                 if (arrow == true) {//移入div同时移入箭头 这个条件永远不会触发 因为两个区域不会相交
 7                     alert("永远不触发");
 8                     $("#left").fadeIn(moveTime);
 9                     $("#right").fadeIn(moveTime);
10                 }
11                 else {//移入div且不在箭头区域 正常触发
12                     $("#left").fadeIn(moveTime);
13                     $("#right").fadeIn(moveTime);
14                 }
15                 isDiv = true;//鼠标移入div状态
16                 flag = false; //停止轮播
17             });
18             $("#content").mouseleave(function () {
19                 var t = setTimeout(a, 1); //晚一点执行 先执行进入箭头区域的事件 把状态改过来 手动改变事件本身的执行顺序
20                 function a() {
21                     if (arrow == true) {//由于先执行了箭头移入事件 箭头区域就不会消失
22                         $("#left").fadeIn(moveTime);
23                         $("#right").fadeIn(moveTime);
24                     }
25                     else {//移出div且不在箭头区域
26                         $("#left").fadeOut(moveTime);
27                         $("#right").fadeOut(moveTime);
28                     }
29                     isDiv = false;
30                 }
31                 flag = true;
32             });
33
34             $("#left").mouseover(function () {
35                 arrow = true;
36                 flag = false;
37                 $("#left").css("background-position", "-10px -65px");
38                 $("#left").css("cursor", "pointer");
39             });
40             $("#left").mouseout(function () {
41                 $("#left").css("background-position", "-10px -5px");
42                 var t = setTimeout(a, 1);//让div的mouseover先执行 以便取到isDiv的值
43                 function a() {
44                     if (isDiv == false) {//移出箭头区域 且不在div中 箭头消失
45                         $("#left").fadeOut(moveTime);
46                         $("#right").fadeOut(moveTime);
47                     }
48                 }
49                 arrow = false;
50                 flag = true;
51             });
52             $("#right").mouseover(function () {
53                 arrow = true
54                 flag = false;
55                 $("#right").css("background-position", "-10px -65px");
56                 $("#right").css("cursor", "pointer");
57             });
58             $("#right").mouseout(function () {
59                 $("#right").css("background-position", "-10px -5px");
60                 var t = setTimeout(a, 1);
61                 function a() {
62                     if (isDiv == false) {
63                         $("#left").fadeOut(moveTime);
64                         $("#right").fadeOut(moveTime);
65                     }
66                 }
67                 arrow = false;
68                 flag = true;
69             });

第一次在博客园写文章 也不知道写的好不好 凡事都有个第一次吗

时间: 2024-10-08 10:29:09

jQuery滚动广告 解决子div绝对定位与父div重叠引起的闪烁问题的相关文章

JQuery实现广告效果(滚动切换)

JQuery实现广告效果(滚动切换) Html+css 效果如上图 代码: Java代码   <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <script src="../jquery-2.1.4.min.js"></script> <

JQuery实现滚动广告(转)

用JQuery实现简单的滚动广告: 实现的思想是,定义一个div,div大小跟每张图片的大小一致.在div里面定义两个ul列表,一个用于显示图片,一个用于控制图片.定义div的 overflow值为hidden,使div内只能显示一张图片,然后利用JQuery的animate()实现整个ul的上下移动,使之显示指定的图片. HTML代码 按 Ctrl+C 复制代码 <div id="d1"> <ul id="adv"> <li>&

&lt;转载&gt;如何解决子级用float浮动父级div高度不能自适应的问题

转载:http://www.kwstu.com/ArticleView/divcss_2013101582430202 解决子级对象使用css float浮动 而父级div不能自适应高度,不能被父级内容撑开解决方法,父级div没有高度解决方法. 最外层的父级DIV不能自适应高度-不能随对象撑开没有高度 当在对象内的盒子使用了float后,导致对象本身不能被撑开自适应高度,这个是由于浮动产生原因. 如何解决父div对象自适应高度,方法有三种,接下来DIVCSS5逐一介绍. 1.首先我们先看HTML

解决子级用css float浮动 而父级div没高度不能自适应高度

解决子级对象使用css float浮动 而父级div不能自适应高度,不能被父级内容撑开解决方法,父级div没有高度解决方法. 最外层的父级DIV不能自适应高度-不能随对象撑开没有高度 当在对象内的盒子使用了float后,导致对象本身不能被撑开自适应高度,这个是由于浮动产生原因. 如何解决父div对象自适应高度,方法有三种,接下来DIVCSS5逐一介绍. 1.首先我们先看HTML源代码: <!DOCTYPE html> <html> <head> <meta cha

jQ禁止右键点击、隐藏搜索文本框文字、在新窗口中打开链接、检测浏览器、预加载图片、页面样式切换、所有列等高、动态控制页面字体大小、获得鼠标指针的X值Y值、验证元素是否为空、替换元素、延迟加载、验证元素是否存在于Jquery集合中、使DIV可点击、克隆对象、使元素居中、计算元素个数、使用Google主机上的Jquery类库、禁用Jquery效果、解决Jquery类库与其他Javascript类库冲突

1. 禁止右键点击 代码如下: $(document).ready(function(){ $(document).bind("contextmenu",function(e){ return false; }); }); 2. 隐藏搜索文本框文字 代码如下: $(document).ready(function() { $("input.text1").val("Enter your search text here"); textFill($

CSS+DIV:父DIV相对定位+子DIV绝对定位

如何在一个div内将一个div进行绝对定位呢?很简单,把父div的position属性设为relative,子div的position属性设为absolute就可以了... 示例: <html> <body> <div>xxxxx<div> <div style="border:1px red solid;width:100%;height:50px;position:relative"> <div style=&quo

jQuery选择器绝对定位实现div覆盖

新建html文件可以运行(jsp文件下不可运行) <!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <title></title>        <style type="text/css">            *{                margin: auto;          

关于移动端js弹出层滚动的时候 body层不可滚动的解决办法

最近在做移动端网站,在点击导航栏,弹出导航列表时,出现了问题.下滑列表时底层body也跟着滚动,连查带想的折腾了两天才解决这个问题.下面主要分享一下解决办法以及关键代码. 一.有的网友建议弹出层弹出时给 html 和 body 都加上"height:100%:overflow:hidden:",然而在手机上并没有什么卵用 二.结合弹出层加上"overflow-y:auto"依然不起作用 .... 后来经过网友的帮助,结合我的代码终于找到了解决的办法 我的项目是用vu

jquery 滚动效果插件

1.css <style> .fl { float: left; } .slider0 img { display: block; width:100px; padding: 2px; } .slider0 li { background: url("http://www.lampbrother.net/php/statics/images/lamp/php_qiye_bg.png") no-repeat scroll 120px 5px ; color: #000000;