先睹为快,移动端:戳这里,打开页面后点击投票查看效果。PC端测试直接切换body的overflow属性:hidden和auto一样可以,比下面相对简化,又有人说这样偶尔不行。。如果你知道优缺点欢迎给出。。。。

说明:1、DOM元素必须,2、弹出框样式:必须,3、弹出框逻辑必须,4、如何使用,需要的时候直接调用:promptObj.init(msg),msg:弹出框的提示信息,不传默认是:請問你想幹嘛?

封装很简单,关键就是弹出框弹出后如何阻止页面继续滚动,经过测试目前没问题,关于指出问题。缺点:暴露在全局的对象

1、必须的DOM元素,放在BODY尾部

<!-- 自定义alert框 -->
<div id="prompt_box">
<div class="prompt_mask">
<p>友情提示:</p>
<h2 id="prompt_title" class="prompt_title"></h2>
<span id="prompt_btn">確 認</span>
</div>
</div>

2、DOM元素的样式表

/*
* @Author: wangjianfei
* @Date: 2017-05-26 17:24:39
* @Last Modified by: wangjianfei
* @Last Modified time: 2017-05-26 19:33:57
*/
*{
margin:;
padding:;
list-style: none;
border:;
box-sizing: border-box;
outline:;
-webkit-tap-highlight-color: transparent;
}
#prompt_box{
position: fixed;
width: 100%;
height: 100%;
left:;
top:;
bottom:;
background: rgba(0, 0, 0, .5);
display: none;
z-index:;
}
.prompt_title{
text-align: center;
color: #565CB2;
margin-top: .5rem;
}
.prompt_mask p{
width: 100%;
height: 1rem;
color: #fff;
line-height: 1rem;
background: #565CB2;
padding-left: .3rem;
font-size: .4rem;
}
.prompt_mask{
width: 7.4rem;
height: 4.2rem;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: #fff;
border-radius: .1rem;
overflow: hidden;
} #prompt_btn{
display: block;
background: #565CB2;
color: #fff;
width: 1.5rem;
height: .8rem;
line-height: .8rem;
text-align: center;
margin: 0 auto;
margin-top: .8rem;
border-radius: .1rem;
font-size: .3rem;
cursor: pointer;
}

3、弹出的逻辑

/*
* @Author: wangjianfei
* @Date: 2017-05-26 18:08:36
* @Last Modified by: wangjianfei
* @Last Modified time: 2017-05-27 10:22:26
*/ 'use strict';
var promptObj={
// 1、弹出框ID
promptBox:null,
// 2、提示信息的元素ID
infoItem:null,
// 3、确认按钮ID
promptBtn:null,
// 4、提示信息具体内容,没传就默认是:請問你想幹嘛?
tipsMsg:null,
// 5、是PC还是手机:true为PC,false为手机端,用于阻止弹出框弹出后页面是否可以滚动
isPC:true,
// 6、初始化对象
init:function(msg){
//1、 指定元素
this.promptBox=document.getElementById("prompt_box");
this.infoItem=document.getElementById("prompt_title");
this.promptBtn=document.getElementById("prompt_btn");
// 2、是否是PC
this.platform();
// 3、显示弹出框 promptBtn
this.showPrompt(msg);
},
// 7、设备判断
platform:function(){
var _this=this;
var userAgentInfo = navigator.userAgent;
var Agents = ["Android", "iPhone",
"SymbianOS", "Windows Phone",
"iPad", "iPod"];
for (var v = 0; v < Agents.length; v++) {
if (userAgentInfo.indexOf(Agents[v]) > 0) {
_this.isPC= false;
break;
}
}
},
// 8、隐藏弹出框
hidePrompt:function(){
promptObj.promptBox.style.display="none";
},
// 9、显示弹出框,并禁止页面继续
showPrompt:function(msg){
var _this=this;
// console.log(_this.isPC);
// 提示信息
_this.tipsMsg=msg||"請問你想幹嘛?";
_this.infoItem.innerHTML=_this.tipsMsg;
_this.promptBox.style.display="block";
_this.promptBtn.addEventListener("click", _this.hidePrompt);
// 2、如果是PC端
if(_this.isPC){
// PC端弹出框弹出后阻止页面滚动
var top=-1;
var scrollTop = document.documentElement.scrollTop||window.pageYOffset||document.body.scrollTop;
_this.promptBox.addEventListener("mouseenter", function(){
top=scrollTop;
// console.log(top);
});
_this.promptBox.addEventListener("mouseleave", function(){
top=-1;
});
window.addEventListener("scroll",function(event){
event.preventDefault();
// console.log(scrollTop);
if(top!==-1){
document.body.scrollTop=scrollTop;
window.pageYOffset=scrollTop;
document.documentElement.scrollTop=scrollTop;
// console.log(scrollTop);
}
});
// 3、如果是移动端
}else{
// 移动端阻止弹出层弹出时候页面的滚动
_this.promptBox.addEventListener("touchmove", function(event){
// 阻止彈出後頁面的滚动
event.preventDefault();
});
}
}
}
// promptObj.init();

javascript基于对象的弹出框封装的更多相关文章

  1. JavaScript 实现简单的 弹出框关闭框

    JavaScript 实现简单的 弹出框关闭框 知识点: 1.javaScript 添加HTML标签 2.javaScript 添加HTML标签属性 3.javaScript 追加元素 代码献上: & ...

  2. .NET MVC 学习笔记(四)— 基于Bootstarp自定义弹出框

    .NET MVC 学习笔记(四)—— 基于Bootstarp自定义弹出框 转载自:https://www.cnblogs.com/nele/p/5327380.html (function ($) { ...

  3. JS弹出框插件zDialog再次封装

    zDialog插件网址:http://www.jq22.com/jquery-info2426 再次封装zDialog的代码: (function ($) { $.extend({ iDialog: ...

  4. JavaScript 弹出框

    JavaScript 有三种类型的弹出框:警告框.确认框和提示框. 警告框 如果要确保信息传递给用户,通常会使用警告框. 当警告框弹出时,用户将需要单击“确定”来继续. 语法 window.alert ...

  5. ASP.NET中的几种弹出框提示

    B/S不像C/S那样一个MessageBox就可以弹出提示框,不过可以通过js的“Alert”来弹出消息,或者通过一些变种的js方法.下面我给大家介绍几种,希望大家喜欢. 四种弹出框代码: prote ...

  6. 弹出框layer的使用封装

    layer弹出框官方网址:http://layer.layui.com/ layer常用方法的封装:layerTool.jsp layer.config({ extend: 'extend/layer ...

  7. 基于HTML5 Canvas 实现弹出框

    用户鼠标移入时,有弹出框出现,这样的需求很常见.这在处理HTML元素实现时简单,但是如果是对HTML5 Canvas 构成的图形进行处理,这种方法不再适用,因为Canvas使用的是另外一套机制,无论在 ...

  8. vue封装公用弹出框方法,实现点击出现操作弹出框

    vue封装公用弹出框方法,实现点击出现操作弹出框 如上图所示,这次要实现一个点击出现操作弹框的效果:并将这个功能封装成一个函数,便于在项目的多个地方使用. 具体思路是: 封装一个组件,组件保护一个插槽 ...

  9. 自定义弹出框基于zepto 记得引入zepto

    html <!DOCTYPE html> <html> <meta charset="utf-8"> <title></tit ...

随机推荐

  1. 使用百度地图实现详细地址自动补全(补全bug''事件只能绑定到一个上的问题')

    function G(id) { return document.getElementById(id); } loadMapAutocomplete("suggestId",&qu ...

  2. 【python-appium】手机一直提示重新安装settings unlock 输入法等 注释掉以下代码

    注释掉目录:C:\Program Files (x86)\Appium\node_modules\appium\lib\devices\android\android.js this.initUnic ...

  3. OpenCV库框架结构

    在上文已经学习过了opencv的编码规则,为了能够方便灵活的运用OPECV库,我们需要对其框架结构进行学习了解,以方便我们进行实际工程调用调用. 1.Opnecv库到底提供了什么? 打开opencv源 ...

  4. Exception、Error、运行时异常与一般异常有何异同

    转自博客  https://blog.csdn.net/m0_37531231/article/details/79502778 一.开场白 对于程序运行过程中的可能出现异常情况,java语言使用一种 ...

  5. 4.ASP.NET MVC 5.0 视图之模型绑定

    大家好,这篇文章,我将向大家介绍ASP.NET MVC的模型视图绑定,ASP.MVC的模型绑定分为两种:一种是动态绑定[Dynamic Binding];还有一种就是强类型绑定[Strongly ty ...

  6. 基于ε-NFA的正则表达式引擎

    正则表达式几乎每个程序员都会用到,对于这么常见的一个语言,有没有想过怎么去实现一个呢?乍一想,也许觉得困难,实际上实现一个正则表达式的引擎并没有想像中的复杂,<编译原理>一书中有一章专门讲 ...

  7. 还原是不可能还原的,这辈子都不可能还原(手动笑cry)

    不好意思,我又把原厂避震换回border的绞牙了. 这套台湾绞牙已经陪伴了我第三个年头了,本次主要是调节了桶身高度,让车身升高了一下,现在是前面3指松将近4指.后面2指(以前是前面2指半.后面1指松2 ...

  8. linux 环境安装

    lnmp.lamp.lnmpa一键安装包(Updated: 2019-02-17) 422 A+ 所属分类:工具 这个脚本是使用shell编写,为了快速在生产环境上部署lnmp/lamp/lnmpa( ...

  9. Linux下MySQL的简单操作

    Linux下MySQL的简单操作 更改mysql数据库root的密码 首次进入数据库是不用密码的: [root@localhost ~]# /usr/local/mysql/bin/mysql -ur ...

  10. 初识Telerik for AJAX

    由于项目需要,本人又刚入门.net开发,项目经理介绍了一个.net流行的开发框架telerik.于是我开始慢慢学习了,发现这个控件还是不错的,学习到的内容和初学者一起探讨一下. 1:第一步 什么是te ...