jQuery滚动广告 解决子div绝对定位与父div重叠引起的闪烁问题
这两天做了一个滚动广告栏的demo 功能有自动轮播 左右箭头移动 导航点选中图片移动效果 模仿的是新浪体育的广告
最难的问题就是子div绝对定位于父div 鼠标移入子div 系统会判定鼠标移出了父div 所以会触发子div消失的效果 消失完因为鼠标在父div中 所以又触发了子div出现的效果
这样就会导致子div一直重复消失出现 形成闪烁的效果 在网上没有找到合适的解决问题办法 我通过设定状态和js的setTimeout解决了此问题
效果如图
需要设定两个状态
var arrow = false; //判断是否进入了箭头区域
var isDiv = false;//判断是否进入了父div
附上关键代码
 $("#content").mouseenter(function () {
                 if ($("#left").is(":animated") || $("#right").is(":animated"))//当箭头处于动画时 不执行鼠标移入事件
                 {
                     return false;//防止鼠标一直进出导致的动画累计
                 }
                 if (arrow == true) {//移入div同时移入箭头 这个条件永远不会触发 因为两个区域不会相交
                     alert("永远不触发");
                     $("#left").fadeIn(moveTime);
                     $("#right").fadeIn(moveTime);
                 }
                 else {//移入div且不在箭头区域 正常触发
                     $("#left").fadeIn(moveTime);
                     $("#right").fadeIn(moveTime);
                 }
                 isDiv = true;//鼠标移入div状态
                 flag = false; //停止轮播
             });
             $("#content").mouseleave(function () {
                 var t = setTimeout(a, 1); //晚一点执行 先执行进入箭头区域的事件 把状态改过来 手动改变事件本身的执行顺序
                 function a() {
                     if (arrow == true) {//由于先执行了箭头移入事件 箭头区域就不会消失
                         $("#left").fadeIn(moveTime);
                         $("#right").fadeIn(moveTime);
                     }
                     else {//移出div且不在箭头区域
                         $("#left").fadeOut(moveTime);
                         $("#right").fadeOut(moveTime);
                     }
                     isDiv = false;
                 }
                 flag = true;
             });
             $("#left").mouseover(function () {
                 arrow = true;
                 flag = false;
                 $("#left").css("background-position", "-10px -65px");
                 $("#left").css("cursor", "pointer");
             });
             $("#left").mouseout(function () {
                 $("#left").css("background-position", "-10px -5px");
                 var t = setTimeout(a, 1);//让div的mouseover先执行 以便取到isDiv的值
                 function a() {
                     if (isDiv == false) {//移出箭头区域 且不在div中 箭头消失
                         $("#left").fadeOut(moveTime);
                         $("#right").fadeOut(moveTime);
                     }
                 }
                 arrow = false;
                 flag = true;
             });
             $("#right").mouseover(function () {
                 arrow = true
                 flag = false;
                 $("#right").css("background-position", "-10px -65px");
                 $("#right").css("cursor", "pointer");
             });
             $("#right").mouseout(function () {
                 $("#right").css("background-position", "-10px -5px");
                 var t = setTimeout(a, 1);
                 function a() {
                     if (isDiv == false) {
                         $("#left").fadeOut(moveTime);
                         $("#right").fadeOut(moveTime);
                     }
                 }
                 arrow = false;
                 flag = true;
             });
第一次在博客园写文章 也不知道写的好不好 凡事都有个第一次吗
jQuery滚动广告 解决子div绝对定位与父div重叠引起的闪烁问题的更多相关文章
- JQuery实现广告效果(滚动切换)
		
JQuery实现广告效果(滚动切换) Html+css 效果如上图 代码: <!DOCTYPE html> <html> <head lang="en&qu ...
 - CSS+DIV:父DIV相对定位+子DIV绝对定位
		
如何在一个div内将一个div进行绝对定位呢?很简单,把父div的position属性设为relative,子div的position属性设为absolute就可以了... 示例: <html& ...
 - <转载>如何解决子级用float浮动父级div高度不能自适应的问题
		
转载:http://www.kwstu.com/ArticleView/divcss_2013101582430202 解决子级对象使用css float浮动 而父级div不能自适应高度,不能被父级内 ...
 - vue setTimeout用法  jquery滚动到某一个div的底部
		
//vue 中setTimeOut用法 var $this = this; setTimeout(function(){ $this.goEnd() }, 10); goEnd:function(){ ...
 - 解决子级用css float浮动 而父级div没高度不能自适应高度
		
解决子级对象使用css float浮动 而父级div不能自适应高度,不能被父级内容撑开解决方法,父级div没有高度解决方法. 最外层的父级DIV不能自适应高度-不能随对象撑开没有高度 当在对象内的盒子 ...
 - CSS|  解决子级用css float浮动 而父级div没高度不能自适应高度
		
解决子级用css float浮动 而父级div没高度不能自适应高度 解决子级对象使用css float浮动 而父级div不能自适应高度,不能被父级内容撑开解决方法,父级div没有高度解决方法. 最外层 ...
 - fullpage 单屏高度超过屏幕高度,实现单屏内可以滚动并解决手机端单屏高度不正确的问题
		
最近接触了好几次jquery.fullpage.js这个插件,实现整屏的滑动,效果很炫,用fullpage来实现也很简单,但是也碰到了一些问题和大家分享一下 1.单屏高度超过屏幕高度,实现单屏的滑动 ...
 - 【IE6的疯狂之十】父级使用padding后子元素绝对定位的BUG
		
在前端开发中,经常会用到css的position:absolute来使层浮动,前通过left,top,right等属性来对层进行定位,但ie6对left,top,right等属性的解释和ie7,ie8 ...
 - 在JSP中使用jQuery的冲突解决(收集整理)
		
在JSP中使用<jsp:include page="somethingPage.jsp"></jsp>来嵌套页面的时候,会出现jQuery之间的冲突 解决办 ...
 
随机推荐
- 常用的CSS清除浮动的方法优缺点分析(个人学习笔记)
			
一.抛一块问题砖(display: block)先看现象: 分析HTML代码结构: <div class="outer"> <div class="di ...
 - Sublime 学习记录(五) Sublime 其他插件(个人喜好)
			
(一) JSFormat 安装 :命令面板 pci 回车 JSFormat 回车 功能 : javascript的代码格式化插件 简介 : 很多网站的JS代码都进行了压缩,一行式的甚至混淆压缩,这让 ...
 - 去掉UItableview headerview黏性
			
//去掉UItableview headerview黏性 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (scrollView ...
 - ZOJ 1530 - Find The Multiple
			
Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal repr ...
 - VB execl文件后台代码,基础语法
			
Excel宏与VBA 程序设计实验指导1 实验1 Excel宏与VBA 语法基础 一.实验目的 1.熟练掌握录制宏.执行宏.加载宏的方法: 2.熟练使用Excel VBA编辑环境,掌握VBA的编辑工具 ...
 - PHP简易计算器方法1
			
<?phpheader("content-type:text/html;charset=utf-8");session_start();?><!DOCTYPE h ...
 - 如何使用getopt()函数解析参数
			
最近在写程序的过程中,把一部分时间都花费在程序对参数的处理上.今天听了学长说到getopt函数,才发现原来c里面还有一个专门解决参数处理的函数,查询了相关资料,这里简单总结一下. 使用int main ...
 - SQL Server 空间监测
			
数据库文件型: select * from sys.dm_db_file_space_usage; go ...
 - Static Function Test
			
public class StaticTestCls { public int x = 0; public static int y = 0; private void SetValue_Object ...
 - delphi 发送Windwos消息控制按钮(控制计算器里的某一个按钮)
			
procedure TfrmMain.btnSendClick(Sender: TObject); var hCalc, h1: Cardinal; begin WinExec('calc', SW_ ...