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

首頁 > 編程 > JavaScript > 正文

Jquery 實現彈出層插件

2019-11-20 13:18:32
字體:
來源:轉載
供稿:網友

彈出層的應用還是比較多的,登陸,一些同頁面的操作,別人的總歸是別人的,自己的才是自己的,所以一直以來想寫個彈出層插件。不多廢話,直接開始吧!

1:遮罩層

 要彈出層,先要用一個遮罩層擋在下面的頁面,此遮罩層是全屏的,頁面滾動也要有,所以設置 position: fixed;還要有透明效果,下面是我定義的遮罩層css,取名mask

復制代碼 代碼如下:

.mask
{
    position: fixed;
    width: 100%;
    height: 100%;
    background-color: white;
    overflow: scroll;
    filter: alpha(opacity=50);
    -moz-opacity: 0.5;
    opacity: 0.5;
    z-index: 20;
    overflow: auto;
    top: 0px;
    right: 0px;
}

2:插件主要參數

tag:為什么需要tag?用tag可以指定需要彈出的隱藏元素,可以指定tag為選擇器“#*”,這樣可以彈出指定元素。這里我設置默認為this。

mainContent:這個參數是否需要?我覺得用處不大,我設置主要是為了對服務器控件,如果全部加在body,那就不能提交表單。但是submit點擊后頁面會刷新,彈出層消失,所以我覺得還是無用...

復制代碼 代碼如下:

    $.fn.xsPop = function (options) {
        var defaults = {//默認值
            title: "彈出窗口", //窗口標題
            width: 500,
            heigth: 400,
            tag: this, //彈出需要加載的元素
            close: "關閉",
            mainContent: "body"http://容器,為了可以提交表單,不過submit會刷新頁面...
        };
        var options = $.extend(defaults, options); //以傳參覆蓋
        this.each(function () {
            xsMain(options.title, options.width, options.heigth, options.tag, options.close, options.mainContent); //插件的主入口
        });
    };

3:利用xsMain函數添加元素,并綁定事件

這里有個處理,就是控制高度和寬度如果設置超過了屏幕高寬度,就會適應屏幕,這樣防止彈出層過大不能操作。其他的就是普通的添加html,本人用的string相加

復制代碼 代碼如下:

//根據傳入數據,添加遮罩層,彈出提示框
    function xsMain(title, width, height, tag, close, mainContent) {
        var divmask = "<div class=/"mask/"></div>";
        $(mainContent).append(divmask);
        var xsPop1 = " <div id=/"xsPop/" class=/"PopUp/"> <div class=/"PopHead/" id=/"xsPopHead/">";
        var xsPop2 = " <b>" + title + " </b><span id=/"xsColse/">" + close + "</span>";
        var xsPop3 = "  </div>  <div class=/"PopMain/" id=/"xsPopMain/">";
        var xsPop5 = "</div><span id=/"xytest/"></span> </div>";
        var allHtml = xsPop1 + xsPop2 + xsPop3 + xsPop5;
        $(mainContent).append(allHtml);
        $(tag).show();
        $(tag).appendTo("#xsPopMain");
        //得到瀏覽器的高度和寬度,進行后面判斷(高度超過,拖動邊框限制)
        clientHeight = window.screen.height;
        clientWidth = window.screen.width;
        if (height > clientHeight) {
            height = clientHeight - 100;
        }
        if (width > clientWidth) {
            width = clientWidth - 100;
        }
        $("#xsPop").css({
            "heigth": height + "px",
            "width": width + "px",
            "margin-top": "-" + (height / 2) + "px",
            "margin-left": "-" + (width / 2) + "px"
        });
        $("#xsPopMain").css("height", height - $("#xsPopHead").height());
        xsdrag("#xsPopHead", "#xsPop"); //綁定拖動動作
        $("#xsColse").bind("click", function () { ClosePop(tag, mainContent); }); //綁定關閉動作
    }

  4:關閉動作

這里要先把tag給容器,不然后面remove時會一起remove,第二次彈出就找不到tag了。

復制代碼 代碼如下:

 //關閉彈出層
    function ClosePop(tag, mainContent) {
        $(mainContent).append(tag); //保存,不然第四步的 $("#xsPop").remove()會把tag清空掉
        $(tag).hide();
        $(".mask").remove();
        $("#xsPop").remove();
    }

5:拖拽效果

方法一:第一次找到的是利用元素的事件,但是很容易出現元素丟失問題,效果不太理想

復制代碼 代碼如下:

    //彈出層的拖拽(失敗的方法,會出現對象丟失)
    //control 為拖拽的元素,tag為動作的元素,一般control在tag內
    //    function drag(control, tag) {
    //        var isMove = false;
    //        var abs_x = 0, abs_y = 0;
    //        $(control).mousedown(
    //            function (event) {
    //                var top = $(tag).offset().top;
    //                var left = $(tag).offset().left;
    //                abs_x = event.pageX - left;
    //                abs_y = event.pageY - top;
    //                isMove = true;
    //            }).mouseleave(function () {
    //                isMove = false;
    //            });
    //        $(control).mouseup(function () {
    //            isMove = false;
    //        });
    //        $(document).mousemove(function (event) {
    //            if (isMove) {
    //                $(tag).css({
    //                    'left': event.pageX - abs_x + $(tag).width() / 2 - 1,
    //                    'top': event.pageY - abs_y + $(tag).height() / 2 - 1
    //                });
    //            }
    //            return false;
    //        });
    //    }

方法二,本人目前采用的方法,利用document的down和up,但是還要有些許問題,移動過快的問題,坐標有小小的跳動現象

  我還發現一個問題,如果我手殘把彈出層直接拖到了屏幕上方的內部,這時放手,呵呵,你永遠也不能把它拖回來或點關閉了。我去看了下百度首頁的彈出層,他們也有這樣的現象,但是把窗口點放大縮小后彈出層會重新回到中心。我也試著這樣做,但是我綁定onresize會出現不能向最下面移動,他們用的事件肯定不是onresize.所以我就直接判斷鼠標位置不能小于0了。

復制代碼 代碼如下:

 //彈出層的拖拽
    //control 為拖拽的元素,tag為動作的元素,一般control在tag內
    function xsdrag(control, tag) {
        $(control).mousedown(function (e)//e鼠標事件 
        {
            var offset = $(this).offset(); //DIV在頁面的位置 
            var x = e.pageX - offset.left; //獲得鼠標指針離DIV元素左邊界的距離 
            var y = e.pageY - offset.top; //獲得鼠標指針離DIV元素上邊界的距離 
            $(document).bind("mousemove", function (ev)//綁定鼠標的移動事件,因為光標在DIV元素外面也要有效果,所以要用doucment的事件,而不用DIV元素的事件 
            {
                if (ev.pageY <= 0) { return; }//防止邊框超過屏幕后無法關閉和拖動
                $(tag).css({
                    'left': ev.pageX - x + $(tag).width() / 2, //本人的布局需要加這個
                    'top': ev.pageY - y + $(tag).height() / 2
                });
            });
        });
        $(document).mouseup(function () {
            $(this).unbind("mousemove");
        });
    }

6:樣式表

  彈出層的布局使用的是top和left+margin-top負值,所以我的js里面有多加高度和寬度的一半

復制代碼 代碼如下:

.mask
{
    position: fixed;
    width: 100%;
    height: 100%;
    background-color: white;
    overflow: scroll;
    filter: alpha(opacity=50);
    -moz-opacity: 0.5;
    opacity: 0.5;
    z-index: 20;
    overflow: auto;
    top: 0px;
    right: 0px;
}
.PopUp
{
    padding: 0px;
    position: absolute;
    z-index: 21 !important;
    background-color: White;
    border-style: solid solid solid solid;
    border-width: 1px;
    border-color: #C0C0C0;
    left: 50%;
    top: 50%;
}
.PopHead
{
    background-color: #F0F0F0;
    border-bottom-style: solid;
    border-bottom-width: 1px;
    border-bottom-color: #C0C0C0;
    height: 30px;
    cursor: move;
    clip: rect(0px, auto, auto, 0px);
}
.PopHead b
{
    float: left;
    display: block;
    color: #C0C0C0;
    font-family: System;
    font-size: medium;
    line-height: 30px;
    text-indent: 2em;
}
.PopHead span
{
    float: right;
    display: block;
    text-align: right;
    line-height: 30px;
    cursor: pointer;
    text-indent: 5px;
    color: #FF0000;
    font-size: 12pt;
}
.PopMain
{
    padding: 10px;
    overflow: auto;
}

7:頁面的使用

  測試服務器控件可以提交表單

復制代碼 代碼如下:

        $(document).ready(function () {
            $("#btnPop").click(function () {
                var options = {
                    title: "my pop",
                    width: 500,
                    heigth: 400,
                    close: "close",
                    mainContent: "form"
                }
                $("#pop1").xsPop(options);
            });
        });

好了差不多就這些了。本來還想做個邊框拉動改變大小的,發現需要點時間,就先不做了。其實說實話,我覺得拖拽意義不大,邊框控制大小意義也不大,因為我設置了溢出會出現滾動條。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久热精品视频在线| 亚洲美女av黄| 一区二区三区视频免费在线观看| 亚洲第一男人av| 奇米4444一区二区三区| 青草成人免费视频| 国产成人91久久精品| 亚洲图片欧美日产| 亚洲色图50p| 色婷婷综合久久久久中文字幕1| 欧美日韩国内自拍| 亚洲国语精品自产拍在线观看| 欧美极品xxxx| 亚洲欧美日本另类| 欧美激情高清视频| 欧美裸体xxxx极品少妇| 亚洲国产精品一区二区三区| 午夜精品美女自拍福到在线| 国产精品专区第二| 亚洲自拍偷拍第一页| 亚洲欧美资源在线| 国产精品日日摸夜夜添夜夜av| 高清欧美一区二区三区| 国产久一一精品| 亚洲福利在线视频| 色悠久久久久综合先锋影音下载| 97免费在线视频| 98精品国产高清在线xxxx天堂| 欧美片一区二区三区| 久久99热精品| 久久精品国产一区| 亚洲欧美另类国产| 4438全国成人免费| 日韩有码在线观看| 日韩一区av在线| 在线成人中文字幕| 成人性生交大片免费看视频直播| 美女扒开尿口让男人操亚洲视频网站| 日本久久久久久| 欧美午夜激情视频| 欧美精品videofree1080p| 成人信息集中地欧美| 91精品国产91久久久久久久久| 97在线视频观看| 欧美高清激情视频| 日韩久久精品电影| 欧美激情亚洲精品| 日韩中文理论片| 精品国产欧美一区二区五十路| 668精品在线视频| 日日骚av一区| 久久综合久中文字幕青草| 欧美第一淫aaasss性| 在线视频国产日韩| 国产亚洲精品成人av久久ww| 日韩精品在线电影| 亚洲最新在线视频| 亚洲精品美女视频| 九九热精品视频在线播放| 国产欧美一区二区三区在线看| 91免费欧美精品| 日本成人精品在线| 激情成人中文字幕| 日韩毛片中文字幕| 成人中文字幕+乱码+中文字幕| 久久九九有精品国产23| 美女久久久久久久| 日韩最新av在线| 91欧美精品午夜性色福利在线| 欧美性猛交xxxxx免费看| 在线成人免费网站| 亚洲无亚洲人成网站77777| 亚洲欧美日韩国产精品| 久久视频在线视频| 国产偷亚洲偷欧美偷精品| 91亚洲精品视频| 有码中文亚洲精品| 中文字幕久热精品视频在线| 97久久久免费福利网址| 欧美色videos| 91精品国产高清久久久久久久久| 欧美成年人视频| 亚洲第一福利视频| 亚洲无亚洲人成网站77777| 亚洲欧洲一区二区三区在线观看| 日韩av在线直播| 国产精品高精视频免费| 欧美亚洲免费电影| 国产精品高潮呻吟视频| 亚洲精品日韩在线| 亚洲人成网站免费播放| 91精品啪在线观看麻豆免费| 欧美大片免费观看| 亚洲人成五月天| 欧美性猛交99久久久久99按摩| 亚洲第一天堂av| 国产小视频国产精品| 欧美在线视频观看免费网站| 欧美激情二区三区| 在线成人一区二区| 一区二区三区天堂av| 最近2019中文免费高清视频观看www99| 亚洲理论片在线观看| 欧美高跟鞋交xxxxhd| 国产日韩欧美电影在线观看| 欧美猛交免费看| 91色视频在线观看| 亚洲精品视频免费在线观看| 亚洲国产婷婷香蕉久久久久久| 久久久久久久一| 国产精品男人爽免费视频1| 亚洲一区二区三区777| 国产精品视频公开费视频| 国产精品视频一区国模私拍| 精品国产欧美一区二区五十路| 亚洲国产成人精品女人久久久| 成人日韩在线电影| 亚洲欧美中文另类| 欧美日韩在线观看视频小说| 日韩av在线免费观看一区| 亚洲第一二三四五区| 国产99久久精品一区二区 夜夜躁日日躁| 久久亚洲精品国产亚洲老地址| 91精品久久久久久久久久久| 91av国产在线| 成人免费大片黄在线播放| 日韩激情av在线播放| 欧美视频中文在线看| 欧美国产精品人人做人人爱| 日韩经典中文字幕| 日韩精品中文在线观看| 久久精品国产亚洲一区二区| 午夜免费日韩视频| 高清欧美一区二区三区| 久久色精品视频| 国模精品系列视频| 亚洲国产精品久久精品怡红院| 国产精品人人做人人爽| 国产第一区电影| 亚洲欧洲激情在线| 久久精品色欧美aⅴ一区二区| 成人两性免费视频| 国产精品亚洲第一区| 国内精品久久久久久久久| 国产精品视频资源| 亚洲美女中文字幕| 中文字幕精品国产| 亚洲视频精品在线| 欧美亚洲国产日本| 亚洲欧美一区二区激情| 91网站免费看| 国产一区二区三区精品久久久| 亚洲新中文字幕| 精品久久久在线观看| 精品香蕉在线观看视频一| 97成人超碰免| 性欧美xxxx视频在线观看| 国产精品视频网站| 国产精品久久久久久久久久新婚| 中文字幕精品国产| 免费97视频在线精品国自产拍| 成人免费自拍视频| 久久九九精品99国产精品| 一本一道久久a久久精品逆3p|