liuxiaolong
2019-05-09 0d1d88cdb668e75ea8609417ac18ae19947e9525
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
/*
 *  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.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.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',
                        'style': (ad.imgWidth ? 'width:' + ad.imgWidth + 'px;' : '')
                    });
                    $('<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);