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文件。

  • 相关阅读:
    How To Build CyanogenMod Android for smartphone
    CentOS安装Code::Blocks
    How to Dual boot Multiple ROMs on Your Android SmartPhone (Upto Five Roms)?
    Audacious——Linux音乐播放器
    How to Dual Boot Multiple ROMs on Your Android Phone
    Everything You Need to Know About Rooting Your Android Phone
    How to Flash a ROM to Your Android Phone
    什么是NANDroid,如何加载NANDroid备份?
    Have you considered compiled a batman-adv.ko for android?
    BATMAN—Better Approach To Mobile Adhoc Networking (B.A.T.M.A.N.)
  • 原文地址:https://www.cnblogs.com/zzcflying/p/2540699.html
Copyright © 2011-2022 走看看