原生JS实现漂浮广告的一种方法(Demo)

实现效果 : 打开网页后,广告窗从指定位置开始在页面漂浮,当鼠标移入时窗口暂停运动,鼠标移出后,窗口在暂停处按原运动轨迹运动,窗口可关闭.


思路 : 实现运动效果需要依托定位属性,使用定时器重复执行代码改变定位,获得漂浮效果;设定不同的x(宽度)和y(高度)方向上每次改变的像素值,实现不同的漂浮轨迹;判断运动窗口达到可视区域边界时,改变x或y的正负值,实现反弹.

———————————更新———————————-

冷风吹醒(手动实验) :

element.style.left(/height/top/width)的使用 :

    在元素的css样式被初始赋值,未经后续赋值,此时element.style.left值为空(无论left初始值为多少),经过后续赋值后才会有值.

完整代码如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{                          //全局reset
                padding: 0;
                margin: 0;
            }
            #advts{
                position: absolute;
                /*left: 0;              这儿有个problem
                top: 0;*/
                width: 300px;
                height: 250px;
                background: url(pics/bg.jpg) no-repeat;     /*设置广告框的背景图片*/
            }
        </style>
<script type="text/javascript">
    window.onload=function(){                               //加载整个页面
        var advts = document.getElementById("advts");       //抓取元素
        var std = document.getElementsByTagName("std");
        var max_height = document.documentElement.clientHeight; //获得浏览器可视区域尺寸
        var max_width = document.documentElement.clientWidth;
        var h = max_height-advts.offsetHeight;              //获得广告窗最大left和top
        var w = max_width-advts.offsetWidth;
        var upright = 1;                                    //初始化漂浮速度
        var cross =2;
        var timer;                                      
        function run(){                                     
            var old_left = advts.style.left;                //将新值赋值给旧值,改变定位获得动态效果
            var new_left = parseInt(old_left)+cross;
            if (new_left>w) {                   //判断是否超过可视区域,true则在赋值前改为最大值,防止撑出滚动条
                new_left=w;
                alert(new_left);
            }
            if (new_left<0) {
                new_left=0;
            }
            advts.style.left = new_left+'px';
            if (new_left==w||new_left==0) {
                cross=cross*(-1);               //改变运动方向
            }
            var old_top = advts.style.top;
            var new_top = parseInt(old_top)+upright;
            if (new_top>h) {
                new_top=h;
            }
            if (new_top<0) {
                new_top=0;
            }
            advts.style.top = new_top+'px';
            if (new_top==h||new_top==0) {           
                upright=upright*(-1);
            }

        }
        timer = setInterval(run,20);            //设置定时器重复执行函数,得到漂浮效果

        advts.onmouseover=function(){           //鼠标移入事件,取消定时器,停止广告框
            clearInterval(timer);
        }
        advts.onmouseout=function(){            //鼠标移出事件,重新设置定时器,接着运动
            timer = setInterval(run,20);
        }
        std.onclick=function(){                 //鼠标点击事件,将广告框display属性修改达,到隐藏效果
            advts.style.display='none';
        }
//      advts.onclick=function(){               这个效果未能实现,将在博客末尾中说明
//          location.assign('http://bing.com');
//      }
        window.onresize=function(){             //窗口尺寸改变事件,重新计算尺寸,和初始化运动速度和方向
            advts.style.left=0;
            advts.style.top=0;
            max_height = document.documentElement.clientHeight;
            max_width = document.documentElement.clientWidth;
            h = max_height-advts.offsetHeight;
            w = max_width-advts.offsetWidth;
            upright = 1;
            cross =2;
        }
    }
</script>
    </head>
    <body>
            <div id="advts" style="left: 0;top: 0;" display='block'>  <!--设置行内(内联)样式-->
                <img src="pics/shutdown.png" class="std"/>    <!--在广告窗中加入关闭图标-->
            </div>
    </body>
</html>

曾令我不知所措的有 :

Q1 : 如何使用代码获得浏览器可视窗口?
A1 : 获得可视高度 document.documentElement.clientHeight;
获得可视宽度 document.documentElement.clientWidth;
Q2 : Q1…

依旧困扰的还有:

Q3 : 在JS中如何获取和修改除行内样式以外的CSS元素内容?(已解决)
说明: (1)element.getAttribute(“”);方法可以获取如id,class等特定和自定义属性,但是style中的如width如何获取?用setAttribute(“”,”“);方法修改内容?
(2)当前样式可用getComputedStyle(‘element’).width或element.CurrentStyle.width获取,那么如何修改呢?
Q4 : 若给广告窗口加< a >标签,或者绑定事件使其跳转(关闭图标在窗口内),那么如何实现点击关闭图标时隐藏窗口而不跳转到链
接呢?

以上内容学习参考了后盾网孙琪峥老师的公共教学资源,侵权删.

欢迎指导交流.

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值