| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- /*
- * Description: 漂浮广告
- * Author: jjc
- * Date: 2012.07.04
- */
- ;(function ( $, window, document, undefined ) {
- var pluginName = 'floatingAd';
- var defaults = {
- step: 1,
- delay: 50,
- isLinkClosed: false,
- onClose: function(elem){}
- };
- var ads = {
- linkUrl: '#',
- 'z-index': '100',
- 'closed-icon': '',
- imgHeight: '',
- imgWidth: '',
- title: '',
- img: '#',
- linkWindow: '_blank',
- headFilter: 0.2
- };
- function Plugin(element, options) {
- this.element = element;
- this.options = $.extend(
- {},
- defaults,
- options,
- {
- width: $(window).width(),
- height: $(window).height(),
- xPos: this.getRandomNum(0, $(window).width() - $(element).innerWidth()),
- yPos: this.getRandomNum(0, 300),
- yOn: this.getRandomNum(0, 1),
- xOn: this.getRandomNum(0, 1),
- yPath: this.getRandomNum(0, 1),
- xPath: this.getRandomNum(0, 1),
- hOffset: $(element).innerHeight(),
- wOffset: $(element).innerWidth(),
- fn: function(){},
- interval: 0
- }
- );
- this._defaults = defaults;
- this._name = pluginName;
-
- this.init();
- }
- Plugin.prototype = {
- init: function () {
- var elem = $(this.element);
- var defaults = this.options;
- var p = this;
- var xFlag = 0;
- var yFlag = 0;
-
- elem.css({"left": defaults.xPos + p.scrollX(), "top": defaults.yPos + p.scrollY()});
- defaults.fn = function(){
- defaults.width = $(window).width();
- defaults.height = $(window).height();
-
- if(xFlag == p.scrollX() && yFlag == p.scrollY()){
- elem.css({"left": defaults.xPos + p.scrollX(), "top": defaults.yPos + p.scrollY()});
- if (defaults.yOn)
- defaults.yPos = defaults.yPos + defaults.step;
- else
- defaults.yPos = defaults.yPos - defaults.step;
-
- if (defaults.yPos <= 0) {
- defaults.yOn = 1;
- defaults.yPos = 0;
- }
- if (defaults.yPos >= (defaults.height - defaults.hOffset)) {
- defaults.yOn = 0;
- defaults.yPos = (defaults.height - defaults.hOffset);
- }
-
- if (defaults.xOn)
- defaults.xPos = defaults.xPos + defaults.step;
- else
- defaults.xPos = defaults.xPos - defaults.step;
-
- if (defaults.xPos <= 0) {
- defaults.xOn = 1;
- defaults.xPos = 0;
- }
- if (defaults.xPos >= (defaults.width - defaults.wOffset)) {
- defaults.xOn = 0;
- defaults.xPos = (defaults.width - defaults.wOffset);
- }
- }
- yFlag = $(window).scrollTop();
- xFlag = $(window).scrollLeft();
- };
- this.run(elem, defaults);
- },
- run: function(elem, defaults){
- this.start(elem, defaults);
- this.adEvent(elem,defaults);
- },
- start: function(elem, defaults){
- elem.find('div.close').hide();
- defaults.interval = window.setInterval(defaults.fn, defaults.delay);
- window.setTimeout(function(){elem.show();}, defaults.delay);
- },
- getRandomNum: function (Min, Max){
- var Range = Max - Min;
- var Rand = Math.random();
- return(Min + Math.round(Rand * Range));
- },
- getPath: function(on){
- return on ? 0 : 1;
- },
- clear: function(elem, defaults){
- elem.find('div.close').show();
- window.clearInterval(defaults.interval);
- },
- close: function(elem, defaults, isClose){
- //elem.unbind('hover');
- elem.unbind("mouseenter mouseleave");
- elem.hide();
- if(isClose)
- defaults.onClose.call(elem);
- },
- adEvent: function(elem, defaults){
- var obj = {
- elem: this,
- fn_close: function() {
- this.elem.close(elem, defaults, true);
- },
- fn_clear: function() {
- if(this.elem.options.isLinkClosed)
- this.elem.close(elem, defaults, false);
- }
- };
-
- elem.find('div.button').bind('click', jQuery.proxy(obj, "fn_close"));
-
- elem.find('a').bind('click', jQuery.proxy(obj, "fn_clear"));
-
- var stop = {
- elem: this,
- over: function(){
- this.elem.clear(elem, defaults);
- },
- out: function(){
- this.elem.start(elem, defaults);
- }
- };
- elem.bind("mouseenter", jQuery.proxy(stop, "over"));
- elem.bind("mouseleave", jQuery.proxy(stop, "out"));
- /*
- elem.hover(
- jQuery.proxy(stop, "over"),
- jQuery.proxy(stop, "out")
- );
- */
- },
- scrollX: function(){
- var de = document.documentElement;
- return self.pageXOffset || (de && de.scrollLeft) || document.body.scrollLeft;
- },
- scrollY: function(){
- var de = document.documentElement;
- return self.pageYOffset || (de && de.scrollTop) || document.body.scrollTop;
- }
- };
- $.fn.floatingAd = function(options) {
- return this.children("div").each(function (i, elem) {
- if (!$.data(this, 'plugin_' + pluginName)) {
- $.data(this, 'plugin_' + pluginName, new Plugin(this, options));
- }
- });
- };
- $.floatingAd = function(options){
-
- if(options){
- if(options.ad){
- var adDiv = $('#' + pluginName);
-
- if(adDiv.length <= 0)
- adDiv = $('<div>', {
- 'id': pluginName,
- 'class': pluginName
- }).appendTo('body');
-
- for(var i in options.ad){
-
- var ad = options.ad[i];
- ad = $.extend({}, ads, ad);
- //漂浮层
- var div = $('<div>', {
- 'class': 'ad'
- });
-
- div.css("z-index", ad['z-index']);
-
- //关闭层
- var closeDiv = $('<div>', {
- 'class': 'close'
- });
- $('<div>', {
- 'class': 'opacity',
- 'style': 'opacity: ' + ad.headFilter + ';filter: alpha(opacity = ' + ad.headFilter*100 + ');'
- }).appendTo(closeDiv);
-
- $('<div>', {
- 'class': 'text'
- }).append(
- $('<div>', {
- 'class': 'title',
- 'text': ad.title
- })
- ).append(
- $('<div>', {
- 'class': 'button',
- 'style': ad['closed-icon'] ? 'background:url("' + ad['closed-icon'] + '") no-repeat;' : ''
- })
- ).appendTo(closeDiv);
-
- closeDiv.appendTo(div);
-
- //内容层
- var content = $('<div>');
-
- $('<a>', {
- href: ad.linkUrl,
- target: ad.linkWindow,
- title: ad.title
- }).append(
- $('<img>', {
- 'src': ad.img,
- 'style': (ad.imgHeight ? 'height:' + ad.imgHeight + 'px;' : '') +
- (ad.imgWidth ? 'width:' + ad.imgWidth + 'px;' : '')
- })
- ).appendTo(content);
-
- content.appendTo(div);
-
- div.appendTo(adDiv);
- }
- delete options.ad;
- $('#' + pluginName).floatingAd(options);
- }
- }
- else
- $.error('漂浮广告错误!');
- };
- })(jQuery, window, document);
|