現在テスト中: IE6、Firefox、Google ブラウザなどをサポートしています。
まず、このコンポーネントの基本的な構成項目を次のように見てみましょう:
targetCls : '.clickElem', // 要素をクリックします
title: 'I am Long En', // ウィンドウ タイトル
content : 'text:
私はドラゴンです
',2013-12-11 22:30 by Long En0707、409 読み取り、1 件のコメント、お気に入り、編集
プロジェクトは完了しましたが、状況はあまり変わっていません。 今日はたまたまお休みだったので、この時間を利用して簡単な JS ポップアップ ウィンドウ関数を勉強しました。 もちろん、インターネット上にはたくさんのプラグインがあります。もちろん、私はインターネット上のプラグインのソースコードを注意深く見ませんでした。ただ、自分のポップアップウィンドウを頼りにしました。このプラグインには、自分のポップアップのアイデアを実現するための機能がたくさんあります。基本的な機能はできているかもしれないので、もっと充実させたい場合は今後も最適化を続けていく必要があります!欠点があれば!私を許してください!
まず、このコンポーネントの基本的な構成項目を次のように見てみましょう:
Ctrl C を押してコードをコピーします
Ctrl C を押してコードをコピーします
1. タイトルの内容、タイトルの高さ、コンテンツの幅と高さ、ポップアップ ウィンドウをドラッグした後にウィンドウを自動的に閉じることができるかどうかの設定をサポートします。マスクの背景色と透明度の設定を表示するかどうか、およびウィンドウの設定を表示します。表示位置はデフォルトで x 軸 0 と y 軸 0 になり、中央揃えで配置されます。また、x 軸の位置を設定することもできます。軸と Y 軸は自分で設定できますが、親要素の相対位置を指定しない場合、X 軸と Y 軸は親要素に対して相対的な位置になることに注意してください。もちろん、ウィンドウのコンテンツの幅と高さがブラウザの 1 つの画面の幅と高さを超えることはお勧めできません。他の人のポップアップを使用したため、最初の画面の幅と高さよりも小さくするようにしてください。以前のプラグインでは、ブラウザにスクロール バーがあるため、コンテンツの幅と高さが大きくてもウィンドウを閉じることができませんでした。ウィンドウには自動的にスクロール バーが表示されます。
I am Long En< ;/p>
2. img (写真) は次のように設定できます img: http://www.baidu.com/a.jpg
3. id (id ノード) は次のように設定できます 'id:XX'
4. iframe は次のように設定できます。「iframe:http://www.baidu.com (iframe アドレス)」
3. ポップアップ ウィンドウの後にコールバック関数を提供します。ポップアップ ウィンドウの後に必要な操作を行うことができます。
つまり、ポップアップ ウィンドウ コンポーネントについては何も言うことはありません。もちろん、自分のプロジェクトで使用したい場合は、CSS スタイルを自分で書き直すことができます。 JS の基本的なポップアップ ウィンドウ ビジネス機能を完了します。
HTML コードは次のとおりです:
CSSコードは次のとおりです
JSコードは以下の通りです
function Overlay(options){
this.config = {
targetCls : '.clickElem', // 点击元素
title: '我是龙恩', // 窗口标题
content : 'text:
我是龙恩
',};
this.cache = {
isrender : true, // 弹窗html结构只渲染一次
isshow: false, // 窗口是否已经显示出来
moveable : false
};
this.init(options);
}
Overlay.prototype = {
constructor: Overlay,
init: function(options){
this.config = $.extend(this.config,options || {});
var self = this,
_config = self.config,
_cache = self.cache;
$(_config.targetCls).each(function(index,item){
$(item).unbind('click');
$(item).bind('click',function(){
// 渲染弹窗HTML结构
self._renderHTML();
// 窗口移动
self._windowMove();
});
});
// 窗口缩放
self._windowResize('#window-box');
// 窗口随着滚动条一起滚动
self._windowIsScroll('#window-box');
},
/*
* 渲染弹窗HTML结构
*/
_renderHTML: function(){
var self = this,
_config = self.config,
_cache = self.cache;
var html ='';
if(_cache.isrender) {
html+= '
' + // 渲染后 回调函数
_config.callback && $.isFunction(_config.callback) && _config.callback();
},
/**
* 显示弹窗
*/
show: function(){
var self = this,
_config = self.config,
_cache = self.cache;
$("#window-box") && $("#window-box").show();
_cache.isshow = true;
if(_config.time == '' || typeof _config.time == 'undefined') {
return;
}else {
t && clearTimeout(t);
var t = setTimeout(function(){
self._closed();
},_config.time);
}
},
/**
* 隐藏弹窗
*/
hide: function(){
var self = this,
_cache = self.cache;
$("#window-box") && $("#window-box").hide();
_cache.isshow = false;
},
/**
* 判断传进来的内容类型
*/
_contentType: function(){
var self = this,
_config = self.config,
_cache = self.cache;
var contentType = _config.content.substring(0,_config.content.indexOf(":")),
content = _config.content.substring(_config.content.indexOf(":")+1,_config.content.length);
switch(contentType) {
case 'text':
$('#window-content').html(content);
break;
case 'id':
$('#window-content').html($('#'+content).html());
break;
case 'img':
$('#window-content').html("");
break;
case 'iframe':
$('#window-content').html('');
$("#window-content-border").css({'overflow':'visible'});
break;
}
},
/**
* 点击关闭按钮
*/
_closed: function(){
var self = this,
_config = self.config,
_cache = self.cache;
if(_cache.isshow) {
self.hide();
}
if(_config.showBg) {
$("#windowbg").hide();
}
$("#windowbg").animate({"opacity":0},'normal');
},
/**
* 显示弹窗的位置 默认情况下居中
*/
_showDialogPosition: function(container) {
var self = this,
_config = self.config,
_cache = self.cache;
$(container).css({'position':'absolute','z-index':_config.zIndex + 1});
var offsetTop = Math.floor(($(window).height() - $(container).height())/2) + $(document).scrollTop(),
offsetLeft = Math.floor(($(window).width() - $(container).width())/2) + $(document).scrollLeft();
// 判断x,y位置默认是不是等于0 如是的话 居中 否则 根据传进来的位置重新定位
if(0 === _config.position.x && 0 === _config.position.y){
$(container).offset({'top':offsetTop, 'left':offsetLeft});
}else{
$(container).offset({'top':_config.position.y,'left':_config.position.x});
}
},
/**
* Render the height of the bottom background
*/
_renderDocHeight: function(){
var self = this,
_config = self.config;
$("#windowbg").animate({"opacity":_config.opacity},'normal');
if(self._isIE6()){
$("#windowbg").css({'background':'#fff','height':$(document).height() 'px','width':$(document).width() "px"});
}else {
$("#windowbg").css({'background':_config.bgColor,'height':$(document).height() 'px','width':$(document).width() "px"});
}
},
/*
* 窗口缩放
*/
_windowResize: function(elem){
var self = this,
_config = self.config;
$(window).unbind('resize');
$(window).bind('resize',function(){
t && clearTimeout(t);
var t = setTimeout(function(){
if(_config.isResize){
self._showDialogPosition(elem);
self._renderDocHeight();
}
},200);
});
},
/**
* Whether the window scrolls with the scroll bar
*/
_windowIsScroll: function(elem){
var self = this,
_config = self.config;
$(window).unbind('scroll');
$(window).bind('scroll',function(){
t && clearTimeout(t);
var t = setTimeout(function(){
if(_config.isScroll){
self._showDialogPosition(elem);
self._renderDocHeight();
}
},200);
});
},
/**
* Window movement
*/
_windowMove: function(){
var self = this,
_config = self.config,
_cache = self.cache;
var mouseX = 0,
mouseY = 0;
$('.window-title').mouseenter(function(){
$(this).css({'cursor':'move'});
});
$('.window-title').mouseleave(function(){
$(this).css({'cursor':'default'});
});
$('.window-title').mousedown(function(e){
_cache.moveable = true;
mouseX = e.clientX - $(this).offset().left;
mouseY = e.clientY - $(this).offset().top;
$('.window-title').css({'cursor':'move'});
});
$(document).mouseup(function(){
if(!_cache.moveable) {
return;
}
$('.window-title').css({'cursor':'default'});
_cache.moveable = false;
});
$('#window-box').mousemove(function(e){
if(_cache.moveable) {
$(this).css({'left':e.clientX - mouseX 'px','top':e.clientY - mouseY 'px'});
}
});
},
/*
* 判断是否是IE6游览器
* @return {Boolean}
*/
_isIE6: function(){
return navigator.userAgent.match(/MSIE 6.0/)!= null;
}
};