JavaScript实现跟随滚动缓冲运动广告框


Posted in Javascript onJuly 15, 2017

当我们浏览一些网页时我们会发现页面的的边上会有广告图片,当滚动滚动条的时候这些广告图片会跟随性的随页面一起运动(这里我叫它为广告框)。一些网页的广告框是固定在浏览器上的用background:fixed;便可实现。这里我用JavaScript简单的制作了一个随滚动缓冲运动的广告框。

JavaScript实现跟随滚动缓冲运动广告框

制作的原理比较简单,大家都有一个完美的js运动框架,这里的缓冲运动需要用到。这里的广告框设定的是跟随滚动条缓冲运动并运动到浏览器的中间位置。需要理解的是运动距离的计算和一些细节上的处理(一些BUG的预防)

这是我在这里使用的一个js运动框架,传递的参数只有一个并不是完美运动框架。传递的参数是广告框的运动距离,因此我在运动框架内又获取了一次对象。

var timer=null;
    function startMover(iTarget){
      var oDiv=document.getElementById('div1');
      clearInterval(timer);
      timer=setInterval(function(){
          var ispeed=(iTarget-oDiv.offsetTop)/8;
          //速度设置为逐渐减小
          ispeed=ispeed>0?Math.ceil(ispeed):Math.floor(ispeed);
          //避免速度产生小数点
          if(oDiv.offsetTop==iTarget){
            clearInterval(timer);
          }
          else{
          oDiv.style.top=oDiv.offsetTop+ispeed+"px";
          }

    },30);
    };

样式和布局代码

<style>
    #div1{
      width: 100px;
      height: 100px;
      background: #ccc;
      position: absolute;
      //使用绝对定位让其处于右上方
      right: 0;
      top: 0;
  </style>

  <body style="height: 2000px;">
    <div id="div1"></div>
  </body>

js代码

这里增加了.onscroll属性目的是当滚动滚动条的时候也加载页面,广告框就能随着滚动条一起运动了。还增加了.onresize属性,由于我要实现广告框一直是运动到浏览器的中间位置,然而当我改变浏览器高度的时候也要实现广告框的运动,所以增加该属性,当浏览器大小改变时加载。

<script>
    window.onload=window.onscroll=window.onresize=function(){

      var oDiv=document.getElementById('div1');
      var scrolltop=document.documentElement.scrollTop||document.body.scrollTop;
"scrolltop"是滚动条滚动的距离,这里有一个兼容chrome不支持document.documentElement.scrollTop获取语句,其他浏览器支持。          
      var t=(document.documentElement.clientHeight-oDiv.offsetHeight)/2;
"t"为让广告框处于中间位置的高度距离,(获取浏览器的总高度-广告框自身高度)/2      
      startMover(parseInt(t+scrolltop));
"parseIn"返回一个整数,避免小数生成。这里广告框的总移动距离为(t+scrolltop)    
    };

    var timer=null;
    function startMover(iTarget){
      var oDiv=document.getElementById('div1');
      clearInterval(timer);
      timer=setInterval(function(){
          var ispeed=(iTarget-oDiv.offsetTop)/8;

          ispeed=ispeed>0?Math.ceil(ispeed):Math.floor(ispeed);

          if(oDiv.offsetTop==iTarget){
            clearInterval(timer);
          }
          else{
          oDiv.style.top=oDiv.offsetTop+ispeed+"px";
          }

    },30);
    };

  </script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
表格 隔行换色升级版
Nov 07 Javascript
DB.ASP 用Javascript写ASP很灵活很好用很easy
Jul 31 Javascript
分析Node.js connect ECONNREFUSED错误
Apr 09 Javascript
基于JavaScript实现定时跳转到指定页面
Jan 01 Javascript
Bootstrap轮播插件简单使用方法介绍
Jun 21 Javascript
Webpack优化配置缩小文件搜索范围
Dec 25 Javascript
详解vue-router 初始化时做了什么
Jun 11 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
Jan 19 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
Oct 21 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
Mar 07 Javascript
JS轮播图的实现方法
Aug 24 Javascript
微信小程序用户登录和登录态维护的实现
Dec 10 Javascript
Javascript实现基本运算器
Jul 15 #Javascript
基于AngularJS的拖拽文件上传的实例代码
Jul 15 #Javascript
Javascript实现时间倒计时效果
Jul 15 #Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
Jul 15 #Javascript
JavaScript实现时间表动态效果
Jul 15 #Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
Jul 15 #Javascript
JavaScript实现三级联动效果
Jul 15 #Javascript
You might like
基于php缓存的详解
2013/05/15 PHP
php实现文本数据导入SQL SERVER
2015/05/17 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
2016/11/25 PHP
php实现数组重复数字统计实例
2018/09/30 PHP
php桥接模式应用案例分析
2019/10/23 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2007/02/15 Javascript
jquery移除button的inline onclick事件(已测试及兼容浏览器)
2013/01/25 Javascript
jquery对dom的操作常用方法整理
2013/06/25 Javascript
解决jquery1.9不支持browser对象的问题
2013/11/13 Javascript
jquery自动将form表单封装成json的具体实现
2014/03/17 Javascript
jQuery实现单击和鼠标感应事件
2015/02/01 Javascript
javascript检查浏览器是否已经启用XX功能
2015/07/10 Javascript
NodeJS连接MongoDB数据库时报错的快速解决方法
2016/05/13 NodeJs
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
2017/02/19 Javascript
Angular 输入框实现自定义验证功能
2017/02/19 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
详解angular应用容器化部署
2018/08/14 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
[58:11]守擂赛第二周擂主赛 DeMonsTer vs Leopard
2020/04/28 DOTA
Python实现将数据库一键导出为Excel表格的实例
2016/12/30 Python
利用arcgis的python读取要素的X,Y方法
2018/12/22 Python
python实现知乎高颜值图片爬取
2019/08/12 Python
PyCharm 2020 激活到 2100 年的教程
2020/03/25 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
Python使用Chrome插件实现爬虫过程图解
2020/06/09 Python
python绘制分布折线图的示例
2020/09/24 Python
Wilson体育用品官网:美国著名运动器材品牌
2019/05/12 全球购物
意大利奢侈品购物网站:Deliberti
2019/10/08 全球购物
大学生旅游业创业计划书
2014/01/29 职场文书
大专生自荐书范文
2014/06/22 职场文书
拾金不昧表扬信怎么写
2015/05/04 职场文书
MySQL主从复制断开的常用修复方法
2021/04/07 MySQL
java解析XML详解
2021/07/09 Java/Android
Golang日志包的使用
2022/04/20 Golang