Go to comments

jQuery 10个实例 中

五、弹出窗口

1. 实现基本功能

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
body,button,a,h3{padding:0;margin:0;}
button{position:fixed;left:20px;top:20px;z-index:100;}
body{background:url(http://ruyic.com/blog/uploads/image/202211/166982358120973.jpg);}
.wrap{
z-index:103;
width:450px;box-shadow:3px 3px rgba(0, 0, 0, 0.2);
position:absolute;background:#fff;font-size:14px;}
.title{
line-height:32px;text-align:center;font-weight:normal;}
.clear{position:absolute;right:10px;top:-18px;font-size:12px;color:#fff;cursor:pointer;}
.content{height:160px;}
/* 遮罩 */
.widget-overlay {
z-index:101;
position:fixed;
top:0;left:0;
width:100%;height:100%;
background: #666666 url(https://code.jquery.com/ui/1.13.3/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;
opacity:.5;-ms-filter: "alpha(opacity=50)";}
</style>
<title>popWindow</title>
</head>
<body>

<button>弹出窗口</button>
<div class="wrap" style="display:none;">
  <h3 class="title">Code Integration</h3>
  <span class="clear">clear</span>
  <div class="content"></div>
</div>

<script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
  var wrap = $('.wrap'); // 获取窗口元素
  // 计算弹出窗口居的位置
  var browserWidth = $(window).width();
  var browserHight = $(window).height();
  var popWidth = wrap.outerWidth(true);
  var popHigth = wrap.outerHeight(true);
  var browserLeft = browserWidth / 2 - popWidth / 2;
  var browserTop = browserHight / 2 - popHigth / 2;

  $("button").click(function(){
    wrap.show()
      .animate({
        'left': browserLeft,
        'top': browserTop
      }, 500);
  });

  $('.clear').click(function(){
    wrap.hide().css({'left':0,'top':0})
  });
</script>
</body>
</html>


2. 改变视口尺寸,窗口始终居中

var wrap = $('.wrap');
// 计算弹出窗口居的位置
var browserWidth = $(window).width();
var browserHight = $(window).height();
var popWidth = wrap.outerWidth(true);
var popHigth = wrap.outerHeight(true);
var browserLeft = browserWidth / 2 - popWidth / 2;
var browserTop = browserHight / 2 - popHigth / 2;

$("button").click(function(){
  wrap.show()
    .animate({
      'left': browserLeft,
      'top': browserTop
    }, 500);
      
  $('.clear').click(function(){
    wrap.hide().css({'left':0,'top':0})
  });
});

// 监听视口尺寸,重新计算弹出窗口位置
$(window).resize(function(){
  browserWidth = $(window).width();
  browserHight = $(window).height();
  browserLeft = browserWidth / 2 - popWidth / 2;
  browserTop = browserHight / 2 - popHigth / 2;
  wrap.animate({
      'left': browserLeft,
      'top': browserTop
    }, 500).dequeue();
})


3. 出现滚动条时候,窗口始终居中

// 设置滚动条
$('body').height(1400);
$(document.body).width(2400);

var browserScrollTop = $(window).scrollTop(); // 获取浏览器纵向滚动条滚动的距离
var browserScrollLeft = $(window).scrollLeft(); // 获取浏览器横向滚动条滚动的距离

var wrap = $('.wrap');
var browserWidth = $(window).width();
var browserHight = $(window).height();
var popWidth = wrap.outerWidth(true);
var popHigth = wrap.outerHeight(true);
var browserLeft = browserWidth/2 - popWidth/2 + browserScrollLeft; // 加上滚动条横向的宽度
var browserTop = browserHight/2 - popHigth/2 + browserScrollTop; // 加上滚动条纵向的高度

$("button").click(function(){
  wrap.show()
    .animate({
      'left': browserLeft,
      'top': browserTop
    }, 500);
      
  $('.clear').click(function(){
    wrap.hide().css({'left':0,'top':0})
  });
});

$(window).resize(function(){
  if(!wrap.is(':visible')){ // 修复一个bug,弹出层元素显示的时候才执行
    return ;
  }
  browserWidth = $(window).width();
  browserHight = $(window).height();
  browserLeft = browserWidth/2 - popWidth/ 2 + browserScrollLeft; // 同样也加上滚动的宽度
  browserTop = browserHight/2 - popHigth/2 + browserScrollTop; // 同样也加上滚动的高度
  wrap.animate({
      'left': browserLeft,
      'top': browserTop
    }, 500).dequeue();
})

// 监听滚动条,弹出窗口始终居中
$(window).scroll(function(){
  if(!wrap.is(':visible')){ // 修复一个bug,弹出层元素显示的时候才执行
    return ;
  }
  browserScrollTop = $(window).scrollTop();
  browserScrollLeft = $(window).scrollLeft();
  browserLeft = browserWidth/2 - popWidth/ 2 + browserScrollLeft;
  browserTop = browserHight/2 - popHigth/2 + browserScrollTop;
  wrap.animate({
      'left': browserLeft,
      'top': browserTop
    }, 500).dequeue();
})


4. 加遮罩层,遮罩层不写 HTML 元素,用 js 生成 HTML

var wrap = $('.wrap');
// 在js里生成遮罩层元素
var widgetOverlay = '<div class="widget-overlay"></div>';

$('body').height(1400);
$(document.body).width(2400);
var browserScrollTop = $(window).scrollTop();
var browserScrollLeft = $(window).scrollLeft();
// 计算窗口位置
var browserWidth = $(window).width();
var browserHight = $(window).height();
var popWidth = wrap.outerWidth(true);
var popHigth = wrap.outerHeight(true);
var browserLeft = browserWidth/2 - popWidth/2 + browserScrollLeft;
var browserTop = browserHight/2 - popHigth/2 + browserScrollTop;

$("button").click(function(){
  wrap.show()
    .animate({
      'left': browserLeft,
      'top': browserTop
    }, 500);

  // 在body里面插入一个遮罩层
  $('body').append(widgetOverlay);

});

$('.clear').click(function(){
  wrap.hide().css({'left':0,'top':0});
  // 删除蒙版
  $('.widget-overlay').remove();
});

$(window).resize(function(){
  if(!wrap.is(':visible')){
    return ;
  }
  browserWidth = $(window).width();
  browserHight = $(window).height();
  browserLeft = browserWidth/2 - popWidth/ 2 + browserScrollLeft;
  browserTop = browserHight/2 - popHigth/2 + browserScrollTop;
  wrap.animate({
      'left': browserLeft,
      'top': browserTop
    }, 500).dequeue();
})

// 随着滚动条滚动,弹出窗口移动
$(window).scroll(function(){
  if(!wrap.is(':visible')){
    return ;
  }
  browserScrollTop = $(window).scrollTop();
  browserScrollLeft = $(window).scrollLeft();
  browserLeft = browserWidth/2 - popWidth/ 2 + browserScrollLeft;
  browserTop = browserHight/2 - popHigth/2 + browserScrollTop;
  wrap.animate({
      'left': browserLeft,
      'top': browserTop
    }, 500).dequeue();
})




Leave a comment 0 Comments.

Leave a Reply

换一张