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

首頁 > 語言 > JavaScript > 正文

Jquery 實現彈出層插件

2024-05-06 16:15:23
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Jquery 實現彈出層插件,包括遮罩層、插件參數、關閉動作、拖拽效果等,需要的朋友可以參考下
 

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

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"//容器,為了可以提交表單,不過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影视在线| 久久久国产精彩视频美女艺术照福利| 国产激情视频一区| 久久艳片www.17c.com| 国产精品亚洲美女av网站| 在线播放日韩精品| 伊人一区二区三区久久精品| 92看片淫黄大片看国产片| 国产精品视频白浆免费视频| www.国产一区| 两个人的视频www国产精品| 亚洲精品免费av| 国产精品香蕉在线观看| 亚洲国产精品字幕| 91精品在线观看视频| 国产999在线观看| 欧美一级成年大片在线观看| 亚洲色图13p| 亚洲国产小视频在线观看| 日韩最新免费不卡| 性金发美女69hd大尺寸| 国产精品老女人精品视频| 欧美精品videofree1080p| 亚洲国产成人精品久久久国产成人一区| 色yeye香蕉凹凸一区二区av| 国产成人avxxxxx在线看| 久久成人国产精品| 伊人激情综合网| 亚洲国产私拍精品国模在线观看| 91欧美日韩一区| 国产在线一区二区三区| 亚洲网站视频福利| 国语自产精品视频在线看一大j8| 97国产在线视频| 欧美高清在线播放| 国模精品系列视频| 国产精品免费福利| 精品久久久在线观看| 成人免费淫片aa视频免费| 成人欧美在线观看| 亚洲精品视频久久| 亚洲美女免费精品视频在线观看| 91精品国产自产在线观看永久| 91久久精品美女高潮| 91在线无精精品一区二区| 久久大大胆人体| 91精品视频在线| 久久综合久久美利坚合众国| 91精品国产成人www| 永久555www成人免费| 超碰97人人做人人爱少妇| 欧美日韩免费看| 久久激情五月丁香伊人| 亚洲日本中文字幕| 中文字幕av一区| 亚洲成人亚洲激情| 超碰97人人做人人爱少妇| 久久综合免费视频| 欧美性黄网官网| 欧美电影免费观看电视剧大全| 91夜夜未满十八勿入爽爽影院| 日韩有码在线播放| 庆余年2免费日韩剧观看大牛| 韩国国内大量揄拍精品视频| 最近2019年手机中文字幕| 欧美体内谢she精2性欧美| 欧美一级视频一区二区| 久久理论片午夜琪琪电影网| 欧美性猛交xxxx乱大交| 狠狠综合久久av一区二区小说| 国产精品一区二区久久国产| 国产成人在线视频| 欧美午夜视频在线观看| 最新国产成人av网站网址麻豆| 亚洲午夜国产成人av电影男同| 最近2019中文字幕mv免费看| 亚洲一区二区日本| 中文字幕免费精品一区高清| 全亚洲最色的网站在线观看| 亚洲成人久久电影| 国产精品视频大全| 久久露脸国产精品| 国产成人精品a视频一区www| 久久资源免费视频| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲影院高清在线| 久久久国产成人精品| 国产不卡av在线免费观看| 色综合伊人色综合网站| 欧美日韩黄色大片| 久久视频精品在线| 成人免费淫片视频软件| 97久久久免费福利网址| 91禁国产网站| 91亚洲精华国产精华| 在线观看日韩视频| www国产亚洲精品久久网站| 欧美洲成人男女午夜视频| 国产91亚洲精品| …久久精品99久久香蕉国产| 欧美亚洲国产成人精品| 国产在线拍偷自揄拍精品| 久久免费视频观看| 国产精品美女久久久免费| 亚洲人成网7777777国产| 国产精品美女主播在线观看纯欲| 亚洲在线观看视频| 美女999久久久精品视频| 久久久久久这里只有精品| 亚洲人免费视频| 在线视频日韩精品| 第一福利永久视频精品| 欧美电影在线观看完整版| 日韩av在线电影网| 91美女福利视频高清| 欧美高清电影在线看| 黑人欧美xxxx| 日韩欧美成人免费视频| 国产欧美欧洲在线观看| 国产精品久久久999| 欧美最顶级丰满的aⅴ艳星| 国产精品欧美激情| 国产丝袜一区二区三区免费视频| 91美女高潮出水| 欧美一区二粉嫩精品国产一线天| 国内免费精品永久在线视频| 成人淫片在线看| 26uuu另类亚洲欧美日本一| 亚洲国产女人aaa毛片在线| 亚洲第一精品久久忘忧草社区| 欧洲成人在线观看| 精品国产精品三级精品av网址| 国内精久久久久久久久久人| 久久夜色精品亚洲噜噜国产mv| 亚洲欧美成人在线| 综合国产在线观看| 国产精品久久久久久久久久尿| 精品久久久久久亚洲国产300| 2025国产精品视频| 亚洲**2019国产| 亚洲国产欧美在线成人app| 国产精品久久久久久久美男| 欧美限制级电影在线观看| 欧美日韩亚洲91| 日韩免费观看网站| 亚洲在线观看视频网站| 国产精品美腿一区在线看| 国色天香2019中文字幕在线观看| 91tv亚洲精品香蕉国产一区7ujn| 91网站在线免费观看| 在线视频欧美性高潮| 久久777国产线看观看精品| 亚洲一区二区福利| 久久99国产综合精品女同| 国产999视频| 欧美成年人在线观看| 精品久久久久人成| 欧美中文在线视频| 成人xvideos免费视频| 亚洲欧美在线x视频|