js随机飘动的广告图片代码demo效果示例(整理)

简介: js随机飘动的广告图片代码demo效果示例(整理)
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>js随机飘动的广告图片代码</title>
    </head>
    <body> 
       <div id="main" style="position:absolute;">
            <div style="text-align:right;cursor:pointer;" id="close">关闭</div>
            <a href="https://blog.csdn.net/qq_38881495" target="_blank"><img src="https://cs.m.xczhihui.com/xcview/images/geren.jpg" border="0" width="214" height="73" /></a>
        </div>
    </body>
</html>
<script src="http://libs.baidu.com/jquery/1.11.3/jquery.min.js"></script>
<script>
    <!--//公共脚本文件 main.js
    function addEvent(obj, evtType, func, cap) {
        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 removeEvent(obj, evtType, func, cap) {
        cap = cap || false;
        if (obj.removeEventListener) {
            obj.removeEventListener(evtType, func, cap);
            return true;
        } else if (obj.detachEvent) {
            if (cap) {
                obj.releaseCapture();
                return true;
            } else {
                return obj.detachEvent("on" + evtType, func);
            }
        } else {
            return false;
        }
    }
    function getPageScroll() {
        var xScroll, yScroll;
        if (self.pageXOffset) {
            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) {
            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;
    }
    var AdMoveConfig = new Object();
    AdMoveConfig.IsInitialized = false;
    AdMoveConfig.AdCount = 0;
    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, addCloseButton) {
        if (!AdMoveConfig.IsInitialized) {
            AdMoveConfig.Resize();
            AdMoveConfig.IsInitialized = true;
        }
        AdMoveConfig.AdCount++;
        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();
        var rad = (Math.random() + 1) * Math.PI / 6;
        var kx = Math.sin(rad), ky = Math.cos(rad);
        var dirx = (Math.random() < 0.5 ? 1 : -1), diry = (Math.random() < 0.5 ? 1 : -1);
        var step = 1;
        var interval;
        if (addCloseButton) {
            var closebtn = document.createElement("div");
            obj.appendChild(closebtn);
            closebtn.onclick = function () {
                obj.style.display = "none";
                clearInterval(interval);
                closebtn.onclick = null;
                obj.onmouseover = null;
                obj.onmouseout = null;
                obj.MoveHandler = null;
                AdMoveConfig.AdCount--;
                if (AdMoveConfig.AdCount <= 0) {
                    removeEvent(window, "resize", AdMoveConfig.Resize);
                    removeEvent(window, "scroll", AdMoveConfig.Scroll);
                    AdMoveConfig.Resize = null;
                    AdMoveConfig.Scroll = null;
                    AdMoveConfig = null;
                }
            }
        }
        obj.MoveHandler = 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.SetLocation = function (vx, vy) { x = vx; y = vy; }
        this.SetDirection = function (vx, vy) { dirx = vx; diry = vy; }
        this.Run = function () {
            var delay = 10;
            interval = setInterval(obj.MoveHandler, delay);
            obj.onmouseover = function () { clearInterval(interval); }
            obj.onmouseout = function () { interval = setInterval(obj.MoveHandler, delay); }
        }
    }
    //-->
</script>
<script type="text/javascript">
    $(function() {
        $("#close").click(function() {
            $("#main").hide();
        });
    })
    var ad1 = new AdMove("main", true);
    ad1.Run();
</script>

相关文章
|
9月前
|
前端开发 JavaScript API
js实现promise常用场景使用示例
本文介绍JavaScript中Promise的6种常用场景:异步请求、定时器封装、并行执行、竞速操作、任务队列及与async/await结合使用,通过实用示例展示如何优雅处理异步逻辑,避免回调地狱,提升代码可读性与维护性。
426 10
|
10月前
|
JavaScript 前端开发 安全
【逆向】Python 调用 JS 代码实战:使用 pyexecjs 与 Node.js 无缝衔接
本文介绍了如何使用 Python 的轻量级库 `pyexecjs` 调用 JavaScript 代码,并结合 Node.js 实现完整的执行流程。内容涵盖环境搭建、基本使用、常见问题解决方案及爬虫逆向分析中的实战技巧,帮助开发者在 Python 中高效处理 JS 逻辑。
|
JavaScript 前端开发 算法
流量分发代码实战|学会用JS控制用户访问路径
流量分发工具(Traffic Distributor),又称跳转器或负载均衡器,可通过JavaScript按预设规则将用户随机引导至不同网站,适用于SEO优化、广告投放、A/B测试等场景。本文分享一段不到百行的JS代码,实现智能、隐蔽的流量控制,并附完整示例与算法解析。
384 1
|
存储 JavaScript 前端开发
在NodeJS中使用npm包进行JS代码的混淆加密
总的来说,使用“javascript-obfuscator”包可以帮助我们在Node.js中轻松地混淆JavaScript代码。通过合理的配置,我们可以使混淆后的代码更难以理解,从而提高代码的保密性。
1417 9
|
前端开发 JavaScript
【Javascript系列】Terser除了压缩代码之外,还有优化代码的功能
Terser 是一款广泛应用于前端开发的 JavaScript 解析器和压缩工具,常被视为 Uglify-es 的替代品。它不仅能高效压缩代码体积,还能优化代码逻辑,提升可靠性。例如,在调试中发现,Terser 压缩后的代码对删除功能确认框逻辑进行了优化。常用参数包括 `compress`(启用压缩)、`mangle`(变量名混淆)和 `output`(输出配置)。更多高级用法可参考官方文档。
1068 11
|
JavaScript
JS代码的一些常用优化写法
JS代码的一些常用优化写法
229 0
|
JavaScript 前端开发 算法
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
JavaScript 前端开发 API
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
移动开发 运维 供应链
通过array.some()实现权限检查、表单验证、库存管理、内容审查和数据处理;js数组元素检查的方法,some()的使用详解,array.some与array.every的区别(附实际应用代码)
array.some()可以用来权限检查、表单验证、库存管理、内容审查和数据处理等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
供应链 JavaScript 前端开发
通过array.every()实现数据验证、权限检查和一致性检查;js数组元素检查的方法,every()的使用详解,array.some与array.every的区别(附实际应用代码)
array.every()可以用来数据验证、权限检查、一致性检查等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~