js原生广告漂浮效果

漂浮广告效果 源码 详解

话不多说,献上源码 源码后带有详解

html

<style>
    *{
        margin: 0;
        padding: 0;
    }
   #box{
       width: 400px;
       height: 400px;
       /*border: 1px solid red;*/
       background:url("400.png");
       background-repeat: no-repeat;
       position: absolute;
       left: 0;
       top: 0;


   }
    #close{
        font-size: 30px;
        color: red;
        margin-left: 370px;
        margin-top: 5px;
        cursor: pointer;
    }
</style>
<body>
      <div id="box">
          <div id="close" >X</div>
      </div>
</body>

js

<script>
    // 首先需要获取需要的元素
    var box=document.getElementById('box');
    var close=document.getElementById('close');
    // 允许的top最大值  允许的left最大值
    var  maxleft=document.documentElement.clientWidth-box.offsetWidth;
    var  maxtop=document.documentElement.clientHeight-box.offsetHeight;
    // 设置响应式  当窗口大小变化时获取新值
    window.onresize=function () {
         maxleft=document.documentElement.clientWidth-box.offsetWidth;
         maxtop=document.documentElement.clientHeight-box.offsetHeight;
    };


    var l=5;
    var t=5;
    var shijian=function () {
        var oldleft=box.offsetLeft;
        var newleft=oldleft+l;
        var oldtop=box.offsetTop;
        var newtop=oldtop+t;
        // 当box隐藏时三秒后再次弹出   可选
        if (box.style.display=='none') {
            setTimeout(function () {
                box.style.display='block'
            },3000)
        }
        // 防止滚动条
        if (newtop>maxtop){
            newtop=maxtop
        }
        if (newleft>maxleft){
            newleft=maxleft
        }
        if (newtop<0){
            newtop=0
        }
        if (newleft<0){
            newleft=0
        }
        box.style.left=newleft+'px';
        box.style.top=newtop+'px';
        // 如果box到了最底了 让他向上弹起
        if (newleft==maxleft || newleft==0) {
            l=-1*l
        }
        if (newtop==maxtop || newtop==0) {
            t=-1*t
        }

    };
    var timer= setInterval(shijian,20);
    // 当鼠标放到box上时停止移动
    box.onmouseover=function () {
        clearInterval(timer);
    };
    // 当鼠标移开时继续移动
    box.onmouseout=function () {
        timer= setInterval(shijian,20);
    };
    // 点击关闭按钮 隐藏box
    close.onclick=function () {
        box.style.display='none'
    };
</script>

接下来开始详解
第一步 当然是div布局了
布局:

html

<style>
    *{
        margin: 0;
        padding: 0;
    }
   #box{
       width: 400px;
       height: 400px;
       /*border: 1px solid red;*/
       background:url("写入自己的图片路径");
       background-repeat: no-repeat;
       position: absolute;
       left: 0;
       top: 0;


   }
    #close{
        font-size: 30px;
        color: red;
        margin-left: 370px;
        margin-top: 5px;
        cursor: pointer;
    }
</style>
<body>
      <div id="box">
          <div id="close" >X</div>
      </div>
</body>

大概是这个样子:

让它脱离文档流
运动效果可能是下方这个样子的:
在这里插入图片描述
也可能是这样的:
在这里插入图片描述

那么你要想的是如何获取触底呢?其实就是可视区域的高度-盒子的高度,top值如果为这个的话就代表着触底了
在这里插入图片描述
首先让他动起来吧:

js

<script>
    // 首先需要获取需要的元素
    var box=document.getElementById('box');
    var close=document.getElementById('close');
    var shijian=function () {
        var oldleft=box.offsetLeft;
        var newleft=oldleft+1;
        var oldtop=box.offsetTop;
        var newtop=oldtop+1;
        box.style.left=newleft+'px';
        box.style.top=newtop+'px';

    };
    timer= setInterval(shijian,20);
</script>

获取能够达到的最大宽度和高度:

// 允许的top最大值  允许的left最大值
    var  maxleft=document.documentElement.clientWidth-box.offsetWidth;
    var  maxtop=document.documentElement.clientHeight-box.offsetHeight;

调试一下:

if (newtop==maxtop){
            alert('到底了!')
        } 

此时到底以后会弹出到底了,那么我们如何让盒子向上弹呢?
设置两个变量
在这里插入图片描述
如果盒子到边上让他弹起

// 如果box到了边上了 让他向上弹起  这是精简后的代码
        if (newleft==maxleft || newleft==0) {
            l=-1*l
        }
        if (newtop==maxtop || newtop==0) {
            t=-1*t
        }

接下来是窗口发生改变以后怎么做呢?窗体事件

// 设置响应式  当窗口大小变化时获取新值 这里直接赋值就行了
    window.onresize=function () {
        maxleft=document.documentElement.clientWidth-box.offsetWidth;
        maxtop=document.documentElement.clientHeight-box.offsetHeight;
    };

最后就是当鼠标移入盒子,就停止漂浮,移开继续漂浮,关闭按钮点击关闭

// 当鼠标放到box上时停止移动
    box.onmouseover=function () {
        clearInterval(timer);
    };
    // 当鼠标移开时继续移动
    box.onmouseout=function () {
        timer= setInterval(shijian,20);
    };
    // 点击关闭按钮 隐藏box
    close.onclick=function () {
        box.style.display='none'
    };

作者q:2017997299;

猜你喜欢

转载自blog.csdn.net/weixin_43757541/article/details/86240967
今日推荐