Javascriptプラグイン--フローティングウィンドウ
6437 ワード
お客様はこのようなページにフローティングウィンドウをネストする必要があるため、クリックすると指定されたサイトにリンクできるというニーズがあります.実はネット上には似たようなプラグインがたくさんあります.js、jqueryは多くのものを見つけることができます.後で考えてみましたが、自分で書くことにしました.よく知っていてください.実際にどのプラグインを書くにも、まず自分のニーズを理解しなければなりません.それからやっと進むことができて、ここで私は構造関数の設計モードといくつかの簡単な実現論理(もちろんアルゴリズムとも呼ばれます)、いわゆる設計モードとアルゴリズム、つまり生活の中のいくつかの例と思想を使って、ただ心ある人だけで、総括して改善の結果を加えます.工場モードに有利で、最初は工場の流れに基づいているのではないでしょうか.観察者モードは私が前に書いた村のラッパや哨兵の役に似ていますか.アルゴリズムについては、泡のソート、つまり子供たちがどのように迅速にソートしたのか、私の下の論理のように、私は左の原理を利用して、窓の4つの方向を漂って、私は座標軸の4つの方向を理解して、境界に着くたびに1つのxあるいはyを変えることができて需要を満たすことができて、もちろん4つの座標の点を定義することもできます.
皆さんがデザインモードやアルゴリズムを見ているときは、デザインモードやアルゴリズムそのものにこだわらず、実際に結びつけたほうがいい、あるいは今知らない、あるいは仕事で使ったことがない、大丈夫、後での仕事で知らず知らずのうちに使ってしまうかもしれません.
コード:
更新:z-indexを追加し、位置決めをfixedに変更
皆さんがデザインモードやアルゴリズムを見ているときは、デザインモードやアルゴリズムそのものにこだわらず、実際に結びつけたほうがいい、あるいは今知らない、あるいは仕事で使ったことがない、大丈夫、後での仕事で知らず知らずのうちに使ってしまうかもしれません.
コード:
/**
* @author cangowu
* @date 2016.04.06
* @constructor
*
* :
* :posLeft,posTop
* :width,height
* url, text link
*/
function FloatWindow() {
this.domDiv;
this.nWidth;
this.nHeight;
this.oTimer;
this.oDirection = {
x: 1,
y: -1
};
};
FloatWindow.prototype = {
init: function (option) {
if (typeof option === 'undefined') {
option = {};
}
var opt = option;
var sPosLeft = opt.posLeft || '0px',
sPosTop = opt.posTop || '0px',
sWidth = opt.width || '100px',
sHeight = opt.height || '100px',
nZIndex = opt.zIndex || '999',
sHref = opt.href || '',
sTarget = opt.target || '_blank',
sUrl = opt.url || '',
sText = opt.text || '';
var domDiv = document.createElement('div');
domDiv.style.position = 'fixed';
domDiv.style.left = sPosLeft;
domDiv.style.top = sPosTop;
domDiv.style.zIndex = nZIndex;
domDiv.style.width = sWidth;
domDiv.style.height = sHeight;
domDiv.style.backgroundColor = 'blue';
var that = this;
bindEvent(domDiv, 'mouseenter', function () {
clearInterval(that.oTimer);
});
bindEvent(domDiv, 'mouseleave', function () {
that.work();
});
var domLink = document.createElement('a');
domLink.target = sTarget;
domLink.href = sHref || '';
if (opt.hasOwnProperty('url') && sUrl != '') {
var domImg = document.createElement('img');
domImg.src = sUrl;
domImg.style.width = sWidth;
domImg.style.height = sHeight;
domLink.appendChild(domImg);
} else {
var domText = document.createElement('div');
domText.innerHTML = sText;
domLink.appendChild(domText);
}
domDiv.appendChild(domLink);
var domClose = document.createElement('div');
domClose.innerHTML = '×';
domClose.style.position = 'absolute';
domClose.style.top = '5px';
domClose.style.right = '5px';
domClose.style.color = 'blue';
domClose.style.cursor = 'pointer';
bindEvent(domClose, 'mouseenter', function () {
this.style.color = 'red';
});
bindEvent(domClose, 'mouseleave', function () {
this.style.color = 'blue';
});
bindEvent(domClose, 'click', function () {
domDiv.parentNode.removeChild(domDiv);
});
domDiv.appendChild(domClose);
document.body.appendChild(domDiv);
this.domDiv = domDiv;
this.nWidth = parseInt(sWidth.replace('px', ''));
this.nHeight = parseInt(sHeight.replace('px', ''));
},
work: function () {
var domDiv = this.domDiv,
nWidth = this.nWidth,
nHeight = this.nHeight,
oDirection = this.oDirection;
this.oTimer = setInterval(function () {
var nLeft = 10 * oDirection.x + parseInt(domDiv.style.left.replace('px', ''));
var nTop = 10 * oDirection.y + parseInt(domDiv.style.top.replace('px', ''));
var nClientWidth = document.documentElement.clientWidth - nWidth - 2,
nClientHeight = document.documentElement.clientHeight - nHeight - 2;
/**
* , , oDirection, ,
* 1. , y
* 2. , x
* 3. , y
* 4. , x
*/
if (nTop < 0) {
nLeft = nLeft + nTop ;
nTop = 0;
oDirection.y = 1;
} else if (nLeft > nClientWidth) {
nTop = nTop - (nLeft - nClientWidth);
nLeft = nClientWidth;
oDirection.x = -1;
} else if (nTop > nClientHeight ) {
nLeft = nLeft - (nTop - nClientHeight) ;
nTop = nClientHeight ;
oDirection.y = -1;
} else if (nLeft < 0) {
nTop = nTop + nLeft;
nLeft = 0;
oDirection.x = 1;
}
domDiv.style.left = nLeft + 'px';
domDiv.style.top = nTop + 'px';
}, 100);
}
};
function bindEvent(elem, event, fun) {
if (window.attachEvent) {
elem.attachEvent('on' + event, fun);
}
else {
elem.addEventListener(event, fun);
}
}
function getScrollTop() {
var scrollPos;
if (window.pageYOffset) {
scrollPos = window.pageYOffset;
}
else if (document.compatMode && document.compatMode != 'BackCompat') {
scrollPos = document.documentElement.scrollTop;
}
else if (document.body) {
scrollPos = document.body.scrollTop;
}
return scrollPos;
}
var floatWin = new FloatWindow();
var option = {
posLeft: '0px',
posTop: '0px',
width: '100px',
height: '200px',
href: 'http://www.baidu.com',
target: '_blank',
url: 'wzg.jpg',
text: ' text'
};
floatWin.init(option);
floatWin.work();
更新:z-indexを追加し、位置決めをfixedに変更