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 相关文章推荐
javascript 中String.match()与RegExp.exec()的区别说明
Jan 10 Javascript
关于javascript event flow 的一个bug详解
Sep 17 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
Dec 04 Javascript
判断在css加载完毕后执行后续代码示例
Sep 03 Javascript
一个JavaScript去除字符串末尾的空白实例代码
Sep 22 Javascript
jQuery日历插件datepicker用法详解
Mar 03 Javascript
js获取所有checkbox的值的简单实例
May 30 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
Oct 14 Javascript
使用gulp搭建本地服务器并实现模拟ajax
Apr 05 Javascript
关于vuex的学习实践笔记
Apr 05 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
Sep 11 Javascript
JavaScript异步操作中串行和并行
Nov 20 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
dedecms系统常用术语汇总
2007/04/03 PHP
php随机显示指定文件夹下图片的方法
2015/07/13 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
JavaScript入门学习书籍推荐
2008/06/12 Javascript
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
通过DOM脚本去设置样式信息
2010/09/19 Javascript
Jquery 点击按钮自动高亮实现原理及代码
2014/04/25 Javascript
浅析Nodejs npm常用命令
2016/06/14 NodeJs
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
JS实现的几个常用算法
2016/11/12 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
利用nginx + node在阿里云部署https的步骤详解
2017/12/19 Javascript
基于datepicker定义自己的angular时间组件的示例
2018/03/14 Javascript
vue+axios+promise实际开发用法详解
2018/10/15 Javascript
微信小程序之onLaunch与onload异步问题详解
2019/03/28 Javascript
JS实现省市县三级下拉联动
2020/04/10 Javascript
Python中还原JavaScript的escape函数编码后字符串的方法
2014/08/22 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
python实现聊天小程序
2018/03/13 Python
Python3用tkinter和PIL实现看图工具
2018/06/21 Python
使用sklearn之LabelEncoder将Label标准化的方法
2018/07/11 Python
Django模板语言 Tags使用详解
2019/09/09 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
html5实现canvas阴影效果示例
2014/05/07 HTML / CSS
html5 figure和figcaption的使用方法
2018/09/10 HTML / CSS
美国领先的奢侈美容零售商:Bluemercury
2017/07/26 全球购物
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
说出数据连接池的工作机制是什么?
2013/04/19 面试题
清洁工表扬信
2014/01/08 职场文书
文明礼仪事迹材料
2014/01/09 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
初中体育课教学反思
2016/02/16 职场文书
Redis延迟队列和分布式延迟队列的简答实现
2021/05/13 Redis
Python find()、rfind()方法及作用
2022/12/24 Python