飘窗原生js效果
css:
.close {
            width: 30px;
            height: 20px;
            background: white;
            position: absolute;
            right: 0;
            top: 0;
            z-index: 999;
            font-size: 12px;
            text-align: center;
            line-height: 20px;
            cursor: pointer;
            font-family: '微软雅黑';
        }
js:【修改了一些bug】
window.onload = function () {
        /*
            参数
            1. 创建飘窗,填写飘窗的id;
            2. 选择该飘窗是否显示,true显示,false不显示,默认为false,不显示;
            3. 该飘窗的配置信息, xPos,yPos          飘窗的起始位置,默认为左上角,
                               imgWidth,imgHeight   飘窗的大小,默认为w: 310,h: 200,
                               href                 要跳转的链接,默认不跳转,
                               imgSrc               图片的链接,默认为空。
         */
        var fl1 = new FloatWindow('win', true, {
            xPos: 100,
            yPos: 100,
            href: 'http://websong.wang',
            imgSrc: 'https://bpic.588ku.com/art_origin_min_pic/18/07/08/02ced7cd66e3a1341391af9ceb90ec62.jpg'
        });
    }
    var FloatWindow = function (ele, flag, config) {
        flag = flag ? true : false;
        this.opt = this.extend({
            xPos: 0,
            yPos: 0,
            imgWidth: 100,
            imgHeight: 100,
            href: 'javascript:void(0)',
            imgSrc: '',
            step: 1,
            height: 0,
            Hoffset: 0,
            Woffset: 0,
            xon: 0,
            yon: 0
        }, config);
        var html = '<span id="' + ele + '" class="floatWin" style="position:absolute; z-index: 1000;"  >' +
            '<a href="' + this.opt.href + '" target="_blank">' +
            '<img src="' + this.opt.imgSrc + '" border="0">' +
            '</a>' +
            '<div class="close">关闭</div>' +
            '</span>';
            var div = document.createElement('div');
            div.innerHTML = html;  
        if (flag) {
            document.body.appendChild(div);
        } else {
            return;
        }
        if (document.querySelector('#'+ele).length <= 0) {
            return;
        }
        this.ele = document.querySelector('#'+ele);
        this.interval;
        this.delay = 10;
        this.ele.querySelector('img').style['width'] = this.opt.imgWidth + 'px';
        this.ele.querySelector('img').style['height']= this.opt.imgHeight + 'px';
        var _self = this;
        this.ele.onmouseout = function () {
            _self.start();
        }
        this.ele.onmouseover = function () {
            _self.stop();
        }
        this.ele.onclick = function (e) {
            if (e.target.className === 'close')
            _self.stop();
            document.body.removeChild(div);
        }
        changePos = function (ele, moveCfg) {
            width = document.documentElement.clientWidth || document.body.clientWidth;
            height = document.documentElement.clientHeight || document.body.clientHeight;
            Hoffset = ele.offsetHeight;
            Woffset = ele.offsetWidth;
            if (moveCfg.yon) {
                moveCfg.yPos = moveCfg.yPos + moveCfg.step;
            } else {
                moveCfg.yPos = moveCfg.yPos - moveCfg.step;
            }
            if (moveCfg.yPos < 0) {
                moveCfg.yon = 1;
                moveCfg.yPos = 0;
            }
            if (moveCfg.yPos >= (height - Hoffset)) {
                moveCfg.yon = 0;
                moveCfg.yPos = (height - Hoffset);
            }
            if (moveCfg.xon) {
                moveCfg.xPos = moveCfg.xPos + moveCfg.step;
            } else {
                moveCfg.xPos = moveCfg.xPos - moveCfg.step;
            }
            if (moveCfg.xPos < 0) {
                moveCfg.xon = 1;
                moveCfg.xPos = 0;
            }
            if (moveCfg.xPos >= (width - Woffset)) {
                moveCfg.xon = 0;
                moveCfg.xPos = (width - Woffset);
            }
            ele.style.left = moveCfg.xPos + document.body.scrollLeft + "px";
            ele.style.top = moveCfg.yPos + document.documentElement.scrollTop + "px";
        }
        this.start();
    }
    FloatWindow.prototype.start = function () {
        var that = this;
        this.ele.visibility = 'visible';
        this.interval = setInterval(function () {
            changePos(that.ele, that.opt);
        }, this.delay);
    }
    FloatWindow.prototype.stop = function () {
        clearInterval(this.interval)
    }
    FloatWindow.prototype.extend = function (o, e) {
        for (var key in e) {
            if (e[key]) {
                o[key] = e[key];
            }
        }
        return o;
    }
飘窗原生js效果的更多相关文章
- js 字符串分割成字符串数组 遍历数组插入指定DOM里 原生JS效果
		使用的TP3.2 JS字符串分割成字符串数组 var images='{$content.pictureurl} ' ;结构是这样 attachment/picture/uploadify/20141 ... 
- 原生js实现单屏滚动
		类似于fullpage的单屏滚动,使用原生JS实现,不依赖任何js库: css: html,body {height:100%;} body {margin:0px;} div {height:100 ... 
- 原生JS实现"旋转木马"效果的图片轮播插件
		一.写在最前面 最近都忙一些杂七杂八的事情,复习软考.研读经典...好像都好久没写过博客了... 我自己写过三个图片轮播,一个是简单的原生JS实现的,没有什么动画效果的,一个是结合JQuery实现的, ... 
- React.js实现原生js拖拽效果及思考
		一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ... 
- 原生JS封装简单动画效果
		原生JS封装简单动画效果 一致使用各种插件,有时候对原生JS陌生了起来,所以决定封装一个简单动画效果,熟悉JS原生代码 function animate(obj, target,num){ if(ob ... 
- 原生JS实现分页效果2.0(新增了上一页和下一页,添加当前元素样式)
		虽然写的很烂,但至少全部都是自己写的,因为这个没有固定的顺序,所以就没有封装,如果你技术好的话,可以你写的分享给我,谢谢. <!DOCTYPE html><html lang=&qu ... 
- 原生JS实现分页效果1.0
		不太完整,写的太急,等等加上完整注释,写起来还是有些难度的,写的有点水,后面再改进改进. <!DOCTYPE html><html lang="en">&l ... 
- 原生js动画效果(源码解析)
		在做页面中,多数情况下都会遇到页面上做动画效果,大部分都是用jquery来实现动画,今天正好看到一篇原生js实现动画效果的代码,特分享在此. 原文地址:http://www.it165.net/pro ... 
- 利用tween,使用原生js实现模块回弹动画效果
		最近有一个需求,就是当屏幕往下一定像素时,下方会有一个隐藏的模块马上显现出来,向上运动后带有回弹效果.然后屏幕滚回去时这个模块能够原路返回 其实这个效果css3就可以很轻松实现,但是公司要求最低兼容i ... 
随机推荐
- react native 热更新
			一.安装codepush服务 npm install code-push-cli -gcode-push -v 二.创建codepush账号 code-push registercode-push l ... 
- jbpm3.2创建数据库
			因为jbpm3.2的sql脚本有问题,所以我们通过查询来执行是有问题的,所以这里我们通过java代码来执行,这个是没有问题的. 参考博文: http://blog.csdn.net/sz_bdqn/a ... 
- 前端PHP入门-013-变量作用域
			目前,我们知道了几个不同的规矩: 函数定义时后括号里面接的变量是形式上的参数(形参),与函数体外的变量没有任何关系.仅仅是在函数内部执行 函数内声明的变量也与函数外的变量没关系. 但是,我们实际的处理 ... 
- CF844 C 置换 水
			由于每个数字只出现一次,离散化一下,置换求个循环节就好了. /** @Date : 2017-08-25 01:39:39 * @FileName: C.cpp * @Platform: Window ... 
- 2015/9/29 Python基础(20):类的授权
			类的授权 1.包装包装在Python编程世界中时经常会被提到的一个术语.它是一个通用的名字,意思是对一个已存在的对象进行包装,不管它是数据类型,还是一段代码,可以是对一个已存在的对象,增加新的,删除不 ... 
- C11关键字&字面值改善
			1.原始字面值改善 原始字面值可以直接表示字符串的实际含义,但是一些特殊字符就需要转义. std::string str = "D:\A\B\test.txt"; std::cou ... 
- CSS居中之美
			关于居中,你会想到什么? div{margin: auto;} 常见的居中方法 水平居中 .demo{ text-align: center; margin: auto; position: abso ... 
- 使用JavaScript实现使用鼠标画线的效果
			<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ... 
- c语言学习笔记.预处理.#ifndef
			#ifndef -> if not define 配合 #endif使用 在h头文件中使用,防止重复包含和编译. 也可以用条件编译来实现. 例如: 编写头文件 test.h 在头文件开头写上两行 ... 
- attachEvent 中this指向
			IE中使用的事件绑定函数与Web标准的不同,而且this指向也不一样,Web标签中的this指向与传统事件绑定中的this一样,是当前目标,但是IE中事件绑定函数中this指向,通过使用call或ap ... 
