公告、广告漂浮移动插件

一款简单的公告、广告漂浮移动插件,此为源码:

Admove.js

function addEvent(obj, evtType, func, cap) {//obj:dom操作对象,evtType:对象绑定的事件,func:触发的函数
    cap = cap || false;
    if (obj.addEventListener) {
        obj.addEventListener(evtType, func, cap);
        return true;
    } else if (obj.attachEvent) {
        if (cap) {
            obj.setCapture();
            return true;
        } else {
            return obj.attachEvent("on" + evtType, func);
        }
    } else {
        return false;
    }
}
function getPageScroll() {//获取滚动条滚动的距离(分别使用不同的浏览器)
    var xScroll, yScroll;
    if (self.pageXOffset) {//获取页面相对于窗口显示区左上角的 X 位置
        xScroll = self.pageXOffset;
    } else if (document.documentElement && document.documentElement.scrollLeft) {
        xScroll = document.documentElement.scrollLeft;//获取页面的水平滚动条的位置
    } else if (document.body) {
        xScroll = document.body.scrollLeft;//获取页面的水平滚动条的位置
    }
    if (self.pageYOffset) {//获取页面相对于窗口显示区左上角的 Y 位置。
        yScroll = self.pageYOffset;
    } else if (document.documentElement && document.documentElement.scrollTop) {
        yScroll = document.documentElement.scrollTop;//获取页面垂直方向滚动的值
    } else if (document.body) {
        yScroll = document.body.scrollTop;
    }
    arrayPageScroll = new Array(xScroll, yScroll);
    return arrayPageScroll;//返回当前页面滚动条距离左边和上边的距离
}
function GetPageSize() {//获取页面位置以及窗口大小
    var xScroll, yScroll;
    if (window.innerHeight && window.scrollMaxY) {
        xScroll = document.body.scrollWidth;//网页正文全文宽
        yScroll = window.innerHeight + window.scrollMaxY;//
    } else if (document.body.scrollHeight > document.body.offsetHeight) {
        xScroll = document.body.scrollWidth;//获取浏览器页面可见的区域宽度
        yScroll = document.body.scrollHeight;
    } else {
        xScroll = document.body.offsetWidth;
        yScroll = document.body.offsetHeight;
    }
    var windowWidth, windowHeight;
    if (self.innerHeight) {
        windowWidth = self.innerWidth;
        windowHeight = self.innerHeight;
    } else if (document.documentElement && document.documentElement.clientHeight) {
        windowWidth = document.documentElement.clientWidth;
        windowHeight = document.documentElement.clientHeight;
    } else if (document.body) {
        windowWidth = document.body.clientWidth;
        windowHeight = document.body.clientHeight;
    }
    if (yScroll < windowHeight) {
        pageHeight = windowHeight;
    } else {
        pageHeight = yScroll;
    }
    if (xScroll < windowWidth) {
        pageWidth = windowWidth;
    } else {
        pageWidth = xScroll;
    }
    arrayPageSize = new Array(pageWidth, pageHeight, windowWidth, windowHeight)
    return arrayPageSize;
}
//广告脚本文件 AdMove.js


var AdMoveConfig = new Object();
AdMoveConfig.IsInitialized = false;
AdMoveConfig.ScrollX = 0;
AdMoveConfig.ScrollY = 0;
AdMoveConfig.MoveWidth = 0;
AdMoveConfig.MoveHeight = 0;
AdMoveConfig.Resize = function() {
    var winsize = GetPageSize();//获取的是页面显示内容的宽和高
    AdMoveConfig.MoveWidth = winsize[2];
    AdMoveConfig.MoveHeight = winsize[3];
    AdMoveConfig.Scroll();
};
AdMoveConfig.Scroll = function() {
    var winscroll = getPageScroll();//获取页面滚动条的位置
    AdMoveConfig.ScrollX = winscroll[0];
    AdMoveConfig.ScrollY = winscroll[1];
};
addEvent(window, "resize", AdMoveConfig.Resize);
addEvent(window, "scroll", AdMoveConfig.Scroll);
function AdMove(id) {
    if (!AdMoveConfig.IsInitialized) {
        AdMoveConfig.Resize();
        AdMoveConfig.IsInitialized = true;
    }
    var obj = document.getElementById(id);
    obj.style.position = "absolute";
    var W = AdMoveConfig.MoveWidth - obj.offsetWidth;
    var H = AdMoveConfig.MoveHeight - obj.offsetHeight;
    var x = W * Math.random(), y = H * Math.random();//random() 方法可返回介于 0 ~ 1 之间的一个随机数
    var rad = (Math.random() + 1) * Math.PI / 6;
    var kx = Math.sin(rad), ky = Math.cos(rad);//取X和Y的精确值
    var dirx = (Math.random() < 0.5 ? 1 : -1), diry = (Math.random() < 0.5 ? 1 : -1);
    var step = 1;
    var interval;
    this.SetLocation = function(vx, vy) { x = vx; y = vy; }
    this.SetDirection = function(vx, vy) { dirx = vx; diry = vy; }
    obj.CustomMethod = function() {
        obj.style.left = (x + AdMoveConfig.ScrollX) + "px";
        obj.style.top = (y + AdMoveConfig.ScrollY) + "px";
        rad = (Math.random() + 1) * Math.PI / 6;
        W = AdMoveConfig.MoveWidth - obj.offsetWidth;
        H = AdMoveConfig.MoveHeight - obj.offsetHeight;
        x = x + step * kx * dirx;
        if (x < 0) { dirx = 1; x = 0; kx = Math.sin(rad); ky = Math.cos(rad); }
        if (x > W) { dirx = -1; x = W; kx = Math.sin(rad); ky = Math.cos(rad); }
        y = y + step * ky * diry;
        if (y < 0) { diry = 1; y = 0; kx = Math.sin(rad); ky = Math.cos(rad); }
        if (y > H) { diry = -1; y = H; kx = Math.sin(rad); ky = Math.cos(rad); }
    };
    this.Run = function() {
        var delay = 10;
        interval = setInterval(obj.CustomMethod, delay);//每隔delay调用一下obj.CustomMethod函数
        obj.onmouseover = function() { clearInterval(interval); }//当鼠标移动到obj上时,停止取消由 setInterval() 设置的 timeout
        obj.onmouseout = function() { interval = setInterval(obj.CustomMethod, delay); }//当鼠标从obj上移开的时,冲洗开始调用obj.CustomMethod函数·
    }
}
    

下面为demo

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="ad">
        <a href="https://www.baidu.com" style="text-decoration: none">
            <div style="font-size:22px;background:#CA2821;text-align:center;line-height:36px;height:110px;padding:15px 10px;color:#E2D92B">关于深圳经济特区<br/>居住证服务平台<br/>网址变更的通知</div>
        </a>
        <div style="cursor:pointer;font-size:16px;float:right;" οnclick="adfloat_close('ad')">关闭</div>
    </div>
    <script src="js/jquery-3.1.0.js"></script>
    <script src="js/Admove.js"></script>
    <script>
        var ad = new AdMove("ad");
        ad.Run();
        function adfloat_close(floatid){
            $("#"+floatid).hide();
            //5s后自动显示
            setTimeout(function(){
                $("#"+floatid).show();
            },5000);
        }
    </script>
</body>
</html>



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值