zoukankan      html  css  js  c++  java
  • javascript类lightbox效果

      最近因为需要在手机网站开发一个图片放大缩小的效果。本来想用lightbox的框架代码的,但是代码实在太多,就自己写了一个。

      主要是用到了样式中的透明度,还有div居中显示。

      layout的具体样式 

     <style type="text/css">
        .lay{position:absolute;z-index:998;margin:0 auto;top:0;height:100%;width:100%;background:rgba(0, 0, 0, 0.3);}
     </style>

    在对多个图片绑定事件的时候遇到一个问题。就是我先用循环来判断img元素的个数,然后为每个元素绑定事件,由于我但是代码是这样写的

    for(var i=0; i<$(".pic .img").length; i++) {
      $(".pic .img img").get(i).addEventListener("click", function() {
        alert(i);
      $(".fuc").get(i).style.display = "none"; toBiggerPic(i); })
    }

    如果代码这么写会有一个问题。因为如果这么,加入图片个数为5的话,写那个i的值始终会是5。

    这个主要是作用域的问题。绑定函数的上一级作用域为window,它的值在循环结束后为5,所以无论怎么样都会显示出5。解决办法就是重新设置下作用域,就是使用大家所谓的闭包。

    新的代码:

     for(var i=0; i<$(".pic .img").length; i++) {
            $(".pic .img img").get(i).addEventListener("click", (function(i) {
                return  function() {
              alert(i); $(
    ".fuc").get(i).style.display = "none"; toBiggerPic(i); } })(i),false);

    还有一处是我的div是需要在img图像完全加载完成后才能拥有大小,并进行居中设置。需要判断图片是否加载完全再进行判断。

    因为在手机上页面判断图片是否加载完和pc端不同。它在首次加载图片会执行img.onload方法,但是在图片加载完成之后就直接从缓存中读取图片,不执行window.onload里的代码了。所以需要做一次判断图片是否是首次加载。具体代码:

    function toBiggerPic(i) {
        $(".layout").get(0).style.display = "block";
        $(".popOrigPic2").get(0).style.display = "block";
        $(".popOrigPic2 img").get(0).setAttribute("src", $(".pic .img img").get(i).getAttribute("src").replace(/b/, "g"));
        /*因为浏览器只在第一次加载图片的时候执行onload函数。为了在之后也执行居中的代码。给图片是否加载完成加一个属性的判断。*/
        if($(".popOrigPic2 img").get(0).getAttribute("complete") == "complete") {
            vMiddle($(".popOrigPic2").get(0));
        } else {
            $(".popOrigPic2 img").get(0).onload = function() {
                $(".popOrigPic2 img").get(0).setAttribute("complete", "complete");
                vMiddle($(".popOrigPic2").get(0));
            }
        }
    }

    最后在不同手机进行测试的时候在遮罩层的显示上出现一个问题。

    在android的自带浏览器上,给遮罩层添加点击事件让它隐藏后,遮罩层会变亮黄色然后才消失。后来的解决方法是在遮罩层外部加一个div,给那个div添加点击事件来实现。

    具体代码地址:http://www.cnblogs.com/zzcflying/admin/Files.aspx。testPic文件。

  • 相关阅读:
    mac攻略(八) -- 神器zsh和iterm2的配置
    linux学习(二) -- ubuntu下lnmp环境的配置
    linux学习(一) -- ubuntu下lamp环境的配置
    算法学习(一) -- 基本算法
    laravel5.2总结--数据填充
    laravel5.2总结--数据迁移
    laravel5.2总结--redis使用
    laravel5.2总结--关联关系
    mac攻略(七) -- 环境变量PATH分析
    mac攻略(六) -- mac根目录分析
  • 原文地址:https://www.cnblogs.com/zzcflying/p/2540699.html
Copyright © 2011-2022 走看看