/** * @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 || '', mwidth = opt.rewidth || '100px'; var domdiv = document.createelement('div'); domdiv.style.position = 'fixed'; domdiv.style.left = sposleft; domdiv.style.top = spostop; domdiv.style.zindex = nzindex; $(window).resize(function(){ if($(window).width()>767){ domdiv.style.width = swidth; domdiv.style.height = sheight; }else{ swidth = '200px'; sheight = 'auto'; } }).resize() // domdiv.style.backgroundcolor = '#d7000f'; // domdiv.style.borderradius = '5px'; // domdiv.style.textalign='center'; 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 || ''; var domtext = document.createelement('div'); domtext.innerhtml = stext; domtext.style.color='#fff'; domtext.style.fontsize='16px'; domtext.style.lineheight=1.5; domtext.style.padding='10px'; domtext.style.backgroundimage='url(${basepath}/static/img/bg-linear.jpg)'; domtext.style.backgroundsize='cover'; domtext.style.textalign='center'; domlink.appendchild(domtext); if (opt.hasownproperty('url') && surl != '') { var domimg = document.createelement('img'); domimg.src = surl; domimg.style.width = swidth; domimg.style.height = sheight; domlink.appendchild(domimg); } domdiv.appendchild(domlink); var domclose = document.createelement('div'); domclose.innerhtml = '×'; domclose.style.position = 'absolute'; domclose.style.fontsize='24px'; domclose.style.lineheight='1.2'; domclose.style.color = 'white'; domclose.style.cursor = 'pointer'; $(window).resize(function(){ if($(window).width()>767){ domclose.style.top = '5px'; domclose.style.right = '5px'; }else{ domclose.style.top = '1px'; domclose.style.right = '3px'; } }).resize() // 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; }