• JavaScript_翻转器


    现在随便那个 JavaScript 框架实现像翻转器这样的功能都再容易不过,它们的基础都是 JavaScript,但框架只会让你变得 stupid。知其然,而不知道其所以然。要是用 jQuery 实现一个两状态翻转,几行就行了。

    $(document).ready(function() {
        $('img').each(function() {
            $(this).mouseout(function() {
                $(this).attr('src', 'images/' + $(this).attr('id') + '_off.gif');
            });
            $(this).mouseover(function() {
                $(this).attr('src', 'images/' + $(this).attr('id') + '_on.gif');
            });
        });
    });

    但仅仅会用框架不利于一个程序员的成长。花点时间,把基础打好。

    下面用 JavaScript 实现的与用 jQuery 相比,你看到了:

    • 如何向一个已有的对象添加新的对象和属性,如 outImage、overImage。
    • 如何创建一个标记,如 new Image()。
    • 如何预加载页面的资源。
    • 如何向一个对象添加事件,以匿名函数方式添加事件。

    本文内容

    • 两状态翻转器
    • 三状态翻转器
    • 链接触发翻转器

    两状态翻转器

    鼠标停留或离开时显示的图像不同,产生动画效果。页面 HTML 标记如下:

    <a href="next1.html">
            <img src="images/button1_off.gif" alt="button1" id="button1" /></a>&nbsp;&nbsp;
        <a href="next2.html">
            <img src="images/button2_off.gif" alt="button2" id="button2" /></a>

    JavaScript 代码:

       1: window.onload = rolloverInit;
       2:  
       3: function rolloverInit() {
       4:     for (var i = 0; i < document.images.length; i++) {
       5:         if (document.images[i].parentNode.tagName == "A") {
       6:             setupRollover(document.images[i]);
       7:         }
       8:     }
       9: }
      10:  
      11: function setupRollover(currentImage) {
      12:     currentImage.outImage = new Image();
      13:     currentImage.outImage.src = currentImage.src;
      14:     currentImage.onmouseout = function() {
      15:         this.src = this.outImage.src;
      16:     }
      17:  
      18:     currentImage.overImage = new Image();
      19:     currentImage.overImage.src = "images/" + currentImage.id + "_on.gif";
      20:     currentImage.onmouseover = function() {
      21:         this.src = this.overImage.src;
      22:     }
      23: }

    运行界面:

    ))7WTYBP7H(UAK(LUYH3MMR

    图1 两状态翻转器:鼠标停留在 Button2 后该图改变

    说明:

    1,第 1 行,页面加载完成后,执行 rolloverInit;

    2,第 3 ~9 行,设置界面的 <img> 的翻转功能;

    3,第 14 ~ 16 行和第 20 ~ 21 行,为 currentImage 添加 onmouseout 和 onmouseover 事件。currentImage 是页面 <img> 标记作为一个对象传给函数 setupRollover;

    4,第 12 ~ 13 行和第 18 ~ 19 行,为 currentImage 新建两个对象 outImage 和 overImage,用来缓存翻转时用到的图片。这点比较重要,产生动画效果,需要确保替换的图像立刻出现,而不能从服务器现获得,从而造成延迟。

    三状态翻转器

    在两状态翻转器基础上,还可以让鼠标点击后的图像也不同,从而实现三状态翻转器。页面 HTML 标记如下:

    <div>
        <img src="images/button1_off.gif" alt="button1" id="button1" /></div>
    &nbsp;&nbsp;
    <div>
        <img src="images/button2_off.gif" alt="button2" id="button2" /></div>

    JavaScript 代码:

    window.onload = rolloverInit;
     
    function rolloverInit() {
        for (var i = 0; i < document.images.length; i++) {
            if (document.images[i].parentNode.tagName == "DIV") {
                setupRollover(document.images[i]);
            }
        }
    }
     
    function setupRollover(currentImage) {
        currentImage.outImage = new Image();
        currentImage.outImage.src = currentImage.src;
        currentImage.onmouseout = function() {
            this.src = this.outImage.src;
        }
     
        currentImage.clickImage = new Image();
        currentImage.clickImage.src = "images/" + currentImage.id + "_click.gif";
        currentImage.onclick = function() {
            this.src = this.clickImage.src;
        }
     
        currentImage.overImage = new Image();
        currentImage.overImage.src = "images/" + currentImage.id + "_on.gif";
        currentImage.onmouseover = function() {
            this.src = this.overImage.src;
        }
    }

    运行界面:

    G6@KIN$ZVSHQ`UYPJ(TY5GD

    图2 三状态翻转器:鼠标点击 Button1 后该图改变

    说明:

    1,缓存三个图片;

    2,添加 onmouseout、onmouseover 和 onclick 三个事件。

    链接触发翻转器

    也可以由一个标记来触发翻转器,如 <a>。页面 HTML 标记如下:

    <h1>
            <a href="next.html" id="arrow">Next page</a></h1>
        <img src="images/arrow_off.gif" id="arrowImg" alt="arrow" />

    JavaScript 代码如下:

    window.onload = rolloverInit;
     
    function rolloverInit() {
        for (var i = 0; i < document.links.length; i++) {
            var linkObj = document.links[i];
            if (linkObj.id) { // a tag id="arrow"
                var imgObj = document.getElementById(linkObj.id + "Img"); // img tag id="arrowImg"
                if (imgObj) {
                    setupRollover(linkObj, imgObj);
                }
            }
        }
    }
     
    function setupRollover(thisLink, thisImage) {
        thisLink.imgToChange = thisImage;
        thisLink.onmouseout = function() {
            this.imgToChange.src = this.outImage.src;
        }
        thisLink.onmouseover = function() {
            this.imgToChange.src = this.overImage.src;
        }
     
        thisLink.outImage = new Image();
        thisLink.outImage.src = thisImage.src;
     
        thisLink.overImage = new Image();
        thisLink.overImage.src = "images/" + thisLink.id + "_on.gif";
    }

    运行界面:

    NE7M]%0_`_~KTQ82{VHU{~4

    图3 链接触发翻转器:鼠标停留在 Next page 后改变

    下载 Demo

  • 相关阅读:
    各大高校OJ网站
    项目中调试SQLServer 方便的查看SQL语句的执行时间的方法
    一个联合查询的优化,排行榜排名
    IEdevelopToolbar ie浏览器的css代码调试工具
    SQL Server 2016/2014/2012/2008/2005/2000简体中文企业版下载地址
    sql server 数据库学习
    增加路由ip
    HTTP Error 500.0
    远程的一些知识
    Windows内置系统账户:Local system/Network service/Local Service 区别
  • 原文地址:https://www.cnblogs.com/liuning8023/p/2199146.html
Copyright © 2020-2023  润新知