2016年5月25日下午(妙味课堂js预热课程-4笔记)

一、延时显示框

  首先我们要做的是制作两个显示框,当鼠标移入显示框1的时候显示框2出来,当鼠标移出的时候显示框2消失;其代码如下:

<script type="text/javascript">
        window.onload=function () {
            var oDiv1=document.getElementById("div1");
            var oDiv2=document.getElementById("div2");
            oDiv1.onmouseover=function () {
                oDiv2.style.display="block";
            };
            oDiv1.onmouseout=function () {
                oDiv2.style.display="none";
            }
        }
    </script>
</head>
<body>
    <div id="div1"></div>
    <div id="div2"></div>
</body>

  然后我们要做的就是我们发现当鼠标要移出显示框1的时候是始终不能移入显示框2,现在我们就要加入一个延时型的定时器了,setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。setTimeout(code,millisec);

  代码如下:

 <script type="text/javascript">
        window.onload=function () {
            var oDiv1=document.getElementById("div1");
            var oDiv2=document.getElementById("div2");

            oDiv1.onmouseover=function () {
                oDiv2.style.display="block";
            };
            oDiv1.onmouseout=function () {
                setTimeout(function () {
                    oDiv2.style.display="none";
                }, 300);
            }
        }
    </script>

  但是这时候我们发现显示框2还是在定时以后会消失,那现在我们要做的就是给显示框2也加入一个鼠标移入:即效果为鼠标可以移入显示框2,且鼠标移出时显示框2消失:代码如下:

<script type="text/javascript">
        window.onload=function () {
            var oDiv1=document.getElementById("div1");
            var oDiv2=document.getElementById("div2");
            var timer=null;

            oDiv1.onmouseover=function () {
                oDiv2.style.display="block";
            };
            oDiv1.onmouseout=function () {
                timer=setTimeout(function () {
                    oDiv2.style.display="none";
                }, 300);
            };
            oDiv2.onmouseover=function () {
                clearTimeout(timer);
            };
            oDiv2.onmouseout=function () {
                oDiv2.style.display="none";
            }
        }
    </script>

  这里要注意两个地方:即

    1、给div2也加一个鼠标移入,即当div2鼠标移入地时候,我们要把定时器给清除掉,这样就不会造成鼠标移入地时候造成div2还是消失的这么一个情况,即把定时器给存起来;

    同时在鼠标移入div2的时候我们把定时器给清了;即 oDiv2.onmouseover=function () {clearTimeout(timer);};

     2、当鼠标从div2移出的时候,显示框2消失;

  这里还有一个问题是当鼠标从显示框2移入到显示框1时它会闪烁一下,因为当我们鼠标离开时显示框2会消失,而当移入显示框1时显示框2才出来,所以中间还是会闪烁一下;这里我们的解决办法是一样的,即给显示框2 加一个延时型的定时器;代码如下所示:

<script type="text/javascript">
        window.onload=function () {
            var oDiv1=document.getElementById("div1");
            var oDiv2=document.getElementById("div2");
            var timer=null;

            oDiv1.onmouseover=function () {
                oDiv2.style.display="block";
            };
            oDiv1.onmouseout=function () {
                timer=setTimeout(function () {
                    oDiv2.style.display="none";
                }, 300);
            };
            oDiv2.onmouseover=function () {
                clearTimeout(timer);
            };
            oDiv2.onmouseout=function () {
                setTimeout(function () {
                    oDiv2.style.display="none";
                },300);
            }
        }
    </script>

  说到这里我们又会注意到当鼠标移入显示框1的时候,显示框2 还是会消失,因为显示框2的定时器还在,这个时候我们就可以一样的把显示框2的定时器给存起来,同时在div1的显示框1上面加一个清除定时器;这样我们就可以在显示框1与显示框2之间自由的移动,直到鼠标移出这两个显示框时才消失;代码如下:

 <script type="text/javascript">
        window.onload=function () {
            var oDiv1=document.getElementById("div1");
            var oDiv2=document.getElementById("div2");
            var timer=null;

            oDiv1.onmouseover=function () {
                oDiv2.style.display="block";
                clearTimeout(timer);
            };
            oDiv1.onmouseout=function () {
                timer=setTimeout(function () {
                    oDiv2.style.display="none";
                }, 300);
            };
            oDiv2.onmouseover=function () {
                clearTimeout(timer);
            };
            oDiv2.onmouseout=function () {
                timer=setTimeout(function () {
                    oDiv2.style.display="none";
                },300);
            }
        }
    </script> 

  clearTimeout() 方法可取消由 setTimeout() 方法设置的 timeout。

    clearTimeout(id_of_settimeout)

简化代码:代码得到很大的简化;

<script type="text/javascript">
        window.onload=function () {
            var oDiv1=document.getElementById("div1");
            var oDiv2=document.getElementById("div2");
            var timer=null;

            function show() {
                oDiv2.style.display="block";
                clearTimeout(timer);
            }
            function hide() {
                timer=setTimeout(function () {
                    oDiv2.style.display="none";
                }, 300);
            }

            oDiv1.onmouseover=show;
            oDiv2.onmouseover=show;
            oDiv1.onmouseout=hide;
            oDiv2.onmouseout=hide;
        }
    </script>

  总结延时提示框:

    1、原来的方法:移入显示,移出隐藏;

    2、移出延时隐藏:移出下面的div后,还是隐藏了,就需要清除延时型的定时器;

    3、简化代码:合并两个相同的mouseover和mouseout;

再进行简化:(连续赋值)

<script type="text/javascript">
        window.onload=function () {
            var oDiv1=document.getElementById("div1");
            var oDiv2=document.getElementById("div2");
            var timer=null;

            oDiv1.onmouseover=oDiv2.onmouseover=function() {
                oDiv2.style.display="block";
                clearTimeout(timer);
            };
            oDiv1.onmouseout=oDiv2.onmouseout=function() {
                timer=setTimeout(function () {
                    oDiv2.style.display="none";
                }, 300);
            };
        }
    </script>

  写了这么多,笨的人只能用笨的方法,总结一下就是做一个延时显示框,要用js对其实现。鼠标移入移出事件,以及延时型的定时器,并且要知道如何清除定时器。

  

时间: 2024-10-07 00:23:24

2016年5月25日下午(妙味课堂js预热课程-4笔记)的相关文章

2016年5月25日下午(妙味课堂js预热课程-4笔记二)

二.无缝滚动    如上图所示,现在很多网页都会实现这样的效果:它是如何实现的呢? 1.布局 注意如果想让一个div的位置发生改变,则最好给这个div加上一个绝对定位:position:absolute: obj.offsetLeft 指 obj 相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置,整型,单位像素. (1)这里插入一个小程序,即如何让Div移动起来:代码如下: 1 <style> 2 #div1{width:100px;height:100px;backg

4月25日下午学习日志

2017年4月25日下午学习专业课通信原理的教材第一课学习了一下,继续做张宇数学18讲第四讲一元函数微分学的例题,然后用app学英语单词.

2016年3月25日作业

软考信息系统监理师,2016年3月25日作业 一.进度控制 1.进度控制分为哪四个步骤? 答:计划(Plan).执行(Do).检查(Check).行动(Action) 2.进度计划编制的目的是什么?哪个最重要? 答: 1)  保证暂时获利以补偿已经发生的费用支出 2)  协调资源 3)  使资源被需要时可以利用 4)  预测在不同时间上所需的资金和资源的级别一遍赋予项目不同的优先级 5)  项目进度的正常进行 最重要的是第一个. 3.判断:计划实施阶段是进度控制的核心,是否正确? 答:是 4. 

【EPM-易通元】2016年05月04日下午好消息公布

涨了.涨了.又涨了! 我们的「EPM易通元」天天见涨!太给力了!! 2016.05月04日今天下午已涨0.02美金,目前坼分已到0.22美金啦!如果你有1000个易通元,你今天就收益20美金 如果你有10000个易通元,今天就收益200美金 如果你有100000个易通元,你今天就收益2000美金 如果你有1000000个易通元,你今天就收益20000美金. 恭喜买到「EPM易通元」的朋友们,买到即是赚到! 买入210美金到3500美金 :1美金:6.3人民币兑换,举例买入3500美金(人民币22

妙味课堂——JavaScript基础课程笔记

集中时间把秒微课堂JS的基础课程看完,并且认真完成了课后练习.感觉在JS方面的技能算是入了个门了.课后练习的作业完成的代码我都汇总在了这里.至于视频课的学习笔记,则记录如下. 第01课JS入门基础_热身课程 写JS的步骤 先实现布局 想出实现原理 了解JS语法 希望把某个元素移除的实现 display: none; 显示为无 visibility: hidden; 隐藏 width \ height 透明度 left \ top 拿与背景色相同的div盖住该元素 利用margin值 …… 获取元

2016年5月27日下午(妙味课堂js基础-3笔记三(事件))

一.默认行为 1. 什么是事件的默认行为(默认事件) (1)浏览器不需要我们去编写,浏览器自身就已经具备的功能:(点击右键弹出页面菜单) (2)如何阻止默认行为 2. 上下文菜单:oncontextmenu(右键菜单) <script type="text/javascript"> document.oncontextmenu=function () { alert("a") }; </script> 点击右键就会弹出a,且会出现右键菜单:

2016年5月27日下午(妙味课堂js基础-3笔记二(事件))

一.鼠标事件 1.鼠标位置 可视区位置:clientX.clientY(鼠标的坐标) 这里我们注意,现在我们只知道它是鼠标的坐标,但是我们不知道它是鼠标的什么坐标,现在我们来看一个实例: ——例子1:跟随鼠标的Div (1)onmousemove 事件会在鼠标指针移动时发生. 注释:每当用户把鼠标移动一个像素,就会发生一个 mousemove 事件.这会耗费系统资源去处理所有这些 mousemove 事件.因此请审慎地使用该事件. <head> <style type="tex

软考信息系统监理师,2016年3月25日作业

一.进度控制 1.进度控制分为哪四个步骤? 答:进度控制可以分成四个步骤:计划(Plan ).执行(Do ).检查(Check)和行动 (Action ),简称PDCA. 2.进度计划编制的目的是什么?哪个最重要? 答:进度计划编制的主要目的 (1)保证按时获利以补偿已经发生的费用支出; (2)协调资源; (3)使资源被需要时可以利用; (4)预测在不同时间上所需的资金和资源的级别以便赋予项目以不同的优先 级; (5)项目进度的正常进行. 在这五个目的中,第一个最重要,因为这是项目监理工程师对项

C++第八天笔记2016年02月25日(周四)A.M

1.    继承:一个类A可以继承另一个类B,那么我们称类B为基类(父类),类A为派生类 (子类). 2.    派生类从基类继承了所有成员,除了构造函数.析构函数.=函数. 3.    基类的私有成员,虽然它们也是派生类的私有成员,但是不能在派生类中定义的成员函数访问.这些基类的私有成员只能通过基类的公有成员函数访问. 4.    子类可以自己实现与父类成员函数原型相同(函数名.参数列表)的成员函数,称为覆盖.覆盖是函数重载的特例,覆盖一定是发生在继承的过程中. 在子类中调用被覆盖的父类版本的