zoukankan      html  css  js  c++  java
  • gallery2

    这是对昨天代码的改进版

    1:兼顾到有的浏览器不支持JavaScript或者禁用的情况,所以在页面中a标签是有真实值得。

    2:检测浏览器是否支持getElementsByTagName getElementById的情况,浏览器如果不支持则直接以图片链接的方式给返回。

    3:将onclick事件从页面移动到JavaScript中,做到文档的结构和文档的行为分开。


    HTML:


    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>image Gallery</title>
    <link rel="stylesheet" href="css/layout.css" media="screen">
    </head>
    <body>
    <h1>Snapshots</h1>
    <ul id="imagegallery">
    <li><a href="images/a.jpg" title="Lorem ipsum dolor sit amet, consectetur adipisicing elit. ">test1</a></li>
    <li><a href="images/b.jpg" title="Autem repellendus itaquequi explicabo recusandae.">test2</a></li>
    <li><a href="images/c.jpg" title=" Quae commodi dolores numquam maxime. Alias, soluta!">test3</a></li>
    <li><a href="images/d.jpg" title="facere repudiandae, provident inventore." >test4</a></li>
    </ul>
    <img id="placeholder" src="images/e.jpg" alt="my image gallery">
    <p id="description">choose an image.</p>
    <script type="text/javascript" src="javascript/showPic.js"></script>
    </body>
    </html>
    

      


    JavaScript:

    //主方法为改变图片src
    function showPic(whichpic){
    //验证浏览器是否符合getElementById方法
    if(!document.getElementById("placeholder"))return false;
    //获取a标签内图片的href
    var source=whichpic.getAttribute("href");
    //获取占位图片的Id
    var placeholder=document.getElementById("placeholder");
    //验证placeholder是否是图片标签
    if(placeholder.nodeName!="IMG")return false;
    //修改placeholder的src="href"
    placeholder.setAttribute("src",source);
    //图片的描述,即使图片描述不存在也应该能够执行函数
    if(document.getElementById("description")){
    //获得a节点title,事先进行判断,如果有则把值赋给text否则赋值空字符
    var text=whichpic.getAttribute("title")?whichpic.getAttribute("title"):"";
    //获得description节点
    var description=document.getElementById("description");
    //description的节点类型为3?进行赋值
    if(description.firstChild.nodeType==3){
    description.firstChild.nodeValue=text;
    }	
    }
    return true;
    }
    //为a标签添加onclick事件
    function prepareGallery(){
    //判断浏览器是否能实现getElementsByTagName、和getElementById方法
    if(!document.getElementsByTagName)return false;
    if(!document.getElementById)return false;
    //判断节点imagegallery是否存在
    if(!document.getElementById("imagegallery")) return false;
    //获取节点imagegallery再获取该节点下的所有a节点
    var gallery=document.getElementById("imagegallery");
    var links=gallery.getElementsByTagName("a");
    //遍历a节点,为每个节点添加onclick事件
    for(var i=0;i<links.length;i++){
    links[i].onclick=function(){
    //控制浏览器不打开新的页面,因为如果showPic函数执行返回的是true
    //浏览器将不打开新页面,否则浏览器按照默认形式打开链接
    return showPic(this)?false:true;
    }
    //键盘事件(不添加)有的浏览器是不支持的像oprea而且容易出现问题
    //links[i].onkeypress=links[i].onclick;
    }
    }
    
    /*addLoadEvent是很厉害的一个函数,为所有的需要用window.onload进行绑定
    如果使用window.onload=afunction;在本例中是可以使用,
    毕竟只有一个prepareGallery需要在浏览器一加载就执行
    可以一旦有多个函数有这个需求
    如:
    window.onload=firstfunction;
    window.onload=secondfunction;
    其实只有最后一个才会被实际执行
    so 给出一个解决方式:
    window.onload=function(){
    firstfunction();
    secondfunction()
    }	
    在绑定函数不是很多的情况下这是最简单的方案
    
    以下的方案是弹性最佳的方案,无论有多少个函数需要绑定,都可以轻松绑定
    */	
    function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
    window.onload = func;
    } else {
    window.onload = function() {
    oldonload();
    func();
    }
    }
    }
    
    addLoadEvent(prepareGallery);
    

      

  • 相关阅读:
    hive on tez自定义jobname
    hive血缘关系之输入表与目标表的解析
    spark ml中一个比较通用的transformer
    TF-IDF小记
    namenode服务迁移
    spark on yarn上的dynamic executor
    zookeeper集群线上机器置换
    namenode元数据容错
    Spark HistoryServer服务迁移
    Java中Webservice调用.NET天气接口生成客户端异常
  • 原文地址:https://www.cnblogs.com/Eyrum/p/4563908.html
Copyright © 2011-2022 走看看