亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

原生javascript實現圖片彈窗交互效果

2024-05-06 16:14:12
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了原生javascript實現圖片彈窗交互效果的方法及的相關資料,需要的朋友可以參考下
 

【一】用var 聲明多個變量,比每個變量都用var快多了   

 

復制代碼代碼如下:

var sScrollTop = document.body.scrollTop || document.documentElement.scrollTop,
    sWindow_h = document.documentElement.clientHeight,
    t_h = parseInt(this.getCss(this.getId('gy_photoBox_head'),'height')),
    hold_h = sWindow_h - t_h - 20,
    width = this.nImgWidth ,
    height = this.nImgHeight;  

 

【二】Dom事件優化,在 window.onresize時,定義個定時器,setTimeout,可以防止事件頻繁調用

 

復制代碼代碼如下:

windowResize:function(){
            var _that = this,
                _timer = null;
            // 函數節流 
            window.onresize = function(){
                clearTimeout(_timer);
                _timer = setTimeout(function(){
                    if( _that.tools.getId('gy_photoBox')){
                        _that.setBoxCss();
                    }

 

                },100);
            }        
        }

 

【三】圖片加載的處理函數

復制代碼代碼如下:

/*
        @ src [String] 圖片的地址
        @ success [Function] 圖片加載成功的回調函數
        @ error [Function] 圖片加載失敗的回調函數
        */
        imgLoading:function(opt){ 
            var _img = new Image(),
                _that = this;
            _img.onload = function(){
                _that.nImgWidth = this.width;
                _that.nImgHeight = this.height;
                if(typeof opt.success == 'function'){
                    setTimeout(function(){
                        opt.success();
                    },300);
                }
            }
            _img.onerror = function(){
                if(typeof opt.error){
                    opt.error();
                }            
            }
            // 注意:要放在onload事件下面,否則ie會出現BUG
            _img.src = opt.src;
        }

 

源代碼:

 

復制代碼代碼如下:

/*
author:laoguoyong
*/
(function(){
    /* -------------------------簡單的選擇器-----------------------
    @ 參數 [string] 
    ---------------------------------------
    ★-只支持以下選擇-★
    @ 支持一級選擇器:如'#id','.class','p'
    @ 支持后代選擇,如 '.class p','body span'
    @ 支持子元素選擇,如 '.class>p','body>span'
    ----------------------------------------
    @ return [Array]
    */
    var selector = function(str){
        // 定義元素數組
        var elem = [];
        /* 私有方法
        ------------------------*/
        //返回是id的元素
        function _getId(id){
            return document.getElementById(id);
        }
        //返回存在此類名的元素-元素
        function _getByClassName(className,parent){
            var class_array = [],
                node = parent != undefined&&parent.nodeType==1?parent.getElementsByTagName('*'):document.getElementsByTagName('*'),
                reg = new RegExp("(^|//s)"+className+"(//s|$)");
            for(var n=0,i=node.length;n<i;n++){
                if(reg.test(node[n].className)){
                    class_array.push(node[n]);
                }
            }
            return class_array;
        }
        //一級選擇,如 '#id','p','.class'
        // return [Array]
        function _getDom(s){
            var array_elem = [];
            if (s.indexOf('#')==0){
                array_elem.push(_getId(s.slice(1)));
            }
            else if(s.indexOf('.')==0){
                array_elem = array_elem.concat(_getByClassName(s.slice(1)));
            }
            else{
                var tag = document.getElementsByTagName(s);
                for(var n=0,i=tag.length;n<i;n++){
                    array_elem.push(tag[n]);
                }
            }
            return array_elem;
        }
        /*
        @ arry_elm [Array] : 元素數組,如 ['.demo','p'] ,選擇的是.demo下面的p元素,至于是選擇后代還是子代,請看第2個參數解釋
        @ r [String] -可選(不傳默認為選擇后代): '>',是選擇子代元素;
        --------------------------
        @ return [Array]
        */
        function _query(array_elem,r){
            var node = array_elem,
                type_name = node[0].match(//#/)?'id_'+node[0].slice(1):node[0].match(//./)?'className_'+node[0].slice(1):'tagName_'+node[0],
                child = _getDom(node[1]),
                type = type_name.split('_'),
                len = document.getElementsByTagName('*').length,
                reg = new RegExp("(^|//s)"+type[1]+"(//s|$)");;
            for(var i=0,j=child.length;i<j;i++){
                var par = child[i].parentNode;
                for(var n=0;n<len;n++){
                    if(par.nodeType == 9){
                        break;
                    }
                    if(reg.test(par[type[0]])){
                        elem.push(child[i]);
                        break;                    
                    }else{
                        if(r == '>') break;
                        par = par.parentNode;
                    }        
                }
            }
        }
        /* 接口
        -----------------------*/
        var elemStr = str.replace(/(^/s+)|(/s+$)/,'');
        if(document.querySelectorAll){
            var dom = document.querySelectorAll(elemStr);
            for(var n=0,len=dom.length;n<len;n++){
                elem.push(dom[n]);
            }
        }else{
            var    split = /[/>/s]/g.exec(elemStr);
            if(split){
                var node = elemStr.split(split[0]);
                _query(node,split[0]);
            }else{
                elem = elem.concat( _getDom(elemStr) );
            }
        }
        return elem;
    }
    /* 彈窗功能構造函數
    -----------------------*/
    function LGY_photoBox(option){
        this.opt = option;
        this.oTarget = typeof option.target == 'object'?option.target:selector(option.target);
        if(!this.oTarget) return;
        this.nLen = this.oTarget.length; //總個數
        this.aBigimg_src = []; //大圖數據數組
        this.aTitle = []; //標題數據數組
        this.nIndex = 0; //索引
        this.nImgWidth = 0; //動態獲取圖片的寬
        this.nImgHeight = 0; //動態獲取圖片的高
        this.nDelay = 0.2;
        this.intit();
    }
    LGY_photoBox.prototype = {
        intit:function(){
            var _that = this;
            this.getData();
            for(var n=0;n<this.nLen;n++){
                this.oTarget[n].index = n;
                this.oTarget[n].onclick = function(e){
                    _that.createCover();
                    var e = _that.tools.getEvent(e),
                        target = _that.tools.getTarget(e);
                    // 設置瀏頁面沒有滾動條出現
                    _that.tools.setCss(document.documentElement,{'height':'100%','overflow-y':'hidden','overflow-x':'hidden'});
                    // 獲取當時索引
                    _that.nIndex = this.index;
                    //首次判斷
                    _that.firstLoad(_that.aBigimg_src[_that.nIndex],function(){
                        //插入結構
                         _that.createBoxDom();
                        //關閉
                        _that.tools.getId('gy_photoBox_close').onclick = function(){
                            _that.removeBox();                                    
                        }
                        // 判斷左右按鈕顯示
                        _that.btnIsShow();    
                        // 上一張
                        _that.btnPrev();
                        // 下一張
                        _that.btnNext();
                        // 加載圖片
                        _that.imgChange(_that.aBigimg_src[_that.nIndex]);
                    });
                    // 重置窗口大小
                    _that.windowResize();
                     // 鍵盤事件
                    _that.keyEvent();
                    //阻止跳轉
                    return false;    
                }
            }
        },
        createBoxDom:function(){
            var doc = document,
                exHtml = '',
                boxHtml = doc.createElement('div');
            boxHtml.id = 'gy_photoBox';
            doc.body.appendChild(boxHtml);
            if(typeof this.opt.appendHTML == 'string'){
                exHtml = this.opt.appendHTML;
            }
            boxHtml.innerHTML = '<div id="gy_photoBox_prev"></div>'+
                            '<div id="gy_photoBox_next"></div>'+
                            '<span id="gy_photoBox_close"></span>'+
                            '<div id="gy_photoBox_head">'+exHtml+'</div>'+
                            '<div id="gy_photoBox_main">'+
                                '<img id="gy_photoBox_img_loading" src="http://www.pconline.com.cn/blank.gif" />'+
                                '<img id="gy_photoBox_img" />'+
                                '<div id="gy_photoBox_infor">'+
                                    '<span id="gy_photoBox_num">'+
                                        '<strong id="gy_photoBox_index"></strong>'+
                                        '/'+this.nLen+
                                    '</span>'+
                                    '<p id="gy_photoBox_title"></p>'+
                                '</div>'+
                            '</div>';
        },
        createCover:function(){
            // 創建覆蓋層
            var    doc = document,
                coverHtml = doc.createElement('div');
                coverHtml.id = 'gy_photoBox_cover';
            doc.body.appendChild(coverHtml);
            //設置覆蓋層的樣式
            this.tools.setCss(this.tools.getId('gy_photoBox_cover'),{'height':(doc.body.scrollTop || doc.documentElement.scrollTop)+(doc.documentElement.clientHeight)+'px'});
        },
        setBoxCss:function(){
            var    doc = document,
                nScrollTop = doc.body.scrollTop || doc.documentElement.scrollTop,
                nWindow_h = doc.documentElement.clientHeight,
                eBox_head_h = this.tools.getId('gy_photoBox_head').clientHeight,
                eBox = this.tools.getId('gy_photoBox'),
                eBoxPadding = 10,
                hold_h = nWindow_h - eBoxPadding - 50 - eBox_head_h,
                width = this.nImgWidth ,
                height = this.nImgHeight;
            // alert('nWindow_h:'+nWindow_h+'-'+'eBoxPadding:'+eBoxPadding+'-'+'eBox_head_h:'+eBox_head_h);
            // 圖片大小超過可見范圍,進行縮放 
            if(this.nImgHeight>hold_h){
                height = hold_h,
                width = Math.ceil(this.nImgWidth*(height/this.nImgHeight));
            }
            //設置盒子在整個頁面居中
            this.tools.setCss(eBox,{'width':width+'px',
                                    'height':eBox_head_h + height + 'px',
                                    'margin-left':-(width+eBoxPadding)/2+'px',
                                    'top':nScrollTop+(nWindow_h-height-eBoxPadding)/2+'px'});
            this.tools.setCss(this.tools.getId('gy_photoBox_main'),{'width':width+'px','height':height + 'px'});
            //設置覆蓋層的樣式
            this.tools.setCss(this.tools.getId('gy_photoBox_cover'),{'height':nScrollTop+doc.documentElement.clientHeight+'px'});
        },
        removeBox:function(){
            var doc = document;
            if(this.tools.getId('gy_photoBox')){
                doc.body.removeChild(this.tools.getId('gy_photoBox'));
            }
            if(this.tools.getId('gy_photoBox_cover')){
                document.body.removeChild(this.tools.getId('gy_photoBox_cover'));
            }
            this.tools.setCss(document.documentElement,{'height':'auto','overflow-y':'auto','_overflow-y':'scroll','overflow-x':'auto'});
        },
        getData:function(){
            for(var n=0;n<this.nLen;n++){
                var src = this.oTarget[n].getAttribute('href'),
                    src="/uploads/allimg/150112/122P96163-0.jpg" style="border: 1px solid rgb(204, 204, 204); padding: 3px; max-width: 620px; overflow: hidden;" />


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91久久精品久久国产性色也91| 亚洲人午夜精品免费| 久久大大胆人体| 国产日韩在线精品av| 国产一区二区美女视频| 中文字幕自拍vr一区二区三区| 久久久久久久久久久免费| www国产亚洲精品久久网站| 自拍视频国产精品| 久久影院中文字幕| 欧美高清电影在线看| 欧美性69xxxx肥| 中文字幕在线观看亚洲| 中文字幕少妇一区二区三区| 国产精品视频一区国模私拍| 91天堂在线观看| 欧美在线视频播放| 国产精品欧美日韩久久| 国产亚洲精品一区二区| 亚洲精美色品网站| 久久乐国产精品| 精品女同一区二区三区在线播放| 久久五月天综合| 日韩欧美成人网| 97在线观看视频国产| 91精品国产高清自在线看超| 久久精品电影网站| 亚洲综合第一页| 91老司机在线| 中文字幕国产亚洲| 亚洲欧美国产精品va在线观看| 国产精品日韩电影| 国产精品网红直播| 一级做a爰片久久毛片美女图片| 北条麻妃在线一区二区| 日韩精品在线电影| 九九久久精品一区| 国产精品成人一区二区三区吃奶| 色琪琪综合男人的天堂aⅴ视频| 国产成人av网址| 欧美日韩xxxxx| 国产丝袜一区视频在线观看| 色综合伊人色综合网站| 一个人看的www欧美| 亚洲精品综合精品自拍| 日韩中文字幕在线| 欧美老女人在线视频| 4p变态网欧美系列| 色综合色综合久久综合频道88| 国模精品一区二区三区色天香| 欧美成人激情视频免费观看| 国产精品白丝av嫩草影院| 久久久久久久久久国产精品| 成人国产精品一区二区| 91成人福利在线| 欧美色videos| 不卡av电影院| 亚洲精品www久久久久久广东| 91国内揄拍国内精品对白| 亚洲一区二区免费在线| 亚洲一区二区三区视频| 欧美日韩一区二区在线| 久久69精品久久久久久久电影好| 2018中文字幕一区二区三区| 日韩理论片久久| 视频一区视频二区国产精品| 亚洲精品久久久久中文字幕欢迎你| 日本一本a高清免费不卡| 欧洲成人免费aa| 久久偷看各类女兵18女厕嘘嘘| 欧美性videos高清精品| 久久精品国产久精国产一老狼| 日韩中文字幕精品| 久久精品亚洲一区| 日韩在线观看成人| 亚洲国产精品一区二区三区| 精品无人区乱码1区2区3区在线| 亚洲一品av免费观看| 国产视频亚洲视频| 国产精品成人一区二区三区吃奶| 欧美性色视频在线| 国产一区二区视频在线观看| 久久综合久久美利坚合众国| 欧美午夜视频在线观看| 在线播放日韩精品| 亚洲免费视频在线观看| 亚洲精品美女久久久| 精品五月天久久| 国产日韩在线一区| 78m国产成人精品视频| 亚洲精品国产精品乱码不99按摩| 亚洲国产精品久久久久秋霞蜜臀| 少妇精69xxtheporn| 日本久久久久久久久| 国产精品无码专区在线观看| 国产日韩欧美在线看| 岛国视频午夜一区免费在线观看| 在线观看日韩www视频免费| 国产精品免费在线免费| 日韩中文在线中文网三级| 日韩成人在线视频| 亚洲欧美在线一区二区| 亚洲精品自拍第一页| 亚洲第一男人av| 国产欧美一区二区三区在线看| 精品爽片免费看久久| 色无极影院亚洲| 久久成人av网站| 亚洲色图美腿丝袜| 国产视频自拍一区| 日韩激情av在线免费观看| 激情久久av一区av二区av三区| 日韩av大片在线| 正在播放亚洲1区| 亚洲人高潮女人毛茸茸| 亚洲精品成人av| 久久久999精品视频| 国产中文欧美精品| 欧美性在线观看| 国产精品久久久久久网站| 91国语精品自产拍在线观看性色| wwwwwwww亚洲| 美女999久久久精品视频| 日本一区二区三区在线播放| 亚洲国产精品电影| 欧美性videos高清精品| 亚洲福利小视频| 亚洲一区国产精品| 中文字幕久久久av一区| 91系列在线观看| 欧美大片欧美激情性色a∨久久| 精品无人区太爽高潮在线播放| 九九热99久久久国产盗摄| 成人中文字幕在线观看| 精品激情国产视频| 日本欧美中文字幕| 8090成年在线看片午夜| 国产精品一区av| 国产亚洲精品成人av久久ww| 国产精品电影一区| 欧美日韩一区二区免费在线观看| 在线视频免费一区二区| 国产精品久久久久久久9999| 欧美日韩国产999| 国产偷国产偷亚洲清高网站| 亚洲人成五月天| 亚洲成色777777女色窝| 午夜美女久久久久爽久久| 亚洲欧洲黄色网| 国产一区二区三区久久精品| 日韩不卡在线观看| 欧美性在线视频| 欧美在线视频一二三| 国产精品免费小视频| 91精品国产91| 国产在线不卡精品| 日韩精品在线第一页| 亚洲精品日韩av| 久久免费福利视频| 欧美日韩中文字幕在线视频| 日韩精品视频三区| 亚洲一区二区日本| 国产一区二区三区久久精品| 成人国产在线视频|