JS实现侧边栏鼠标经过弹出框+缓冲效果


Posted in Javascript onMarch 29, 2017

可能这个标题起得不够恰当,简单来说就是:当鼠标移到最左侧时,移出一个框。

首先,我们用两个div来简单布局以下页面:

<div id="box">
 <div id="share">分享到</div>
</div>

这个分享框的弹出原理是:把内层div定位到外层div最右侧紧贴,然后把外层div定位到屏幕左外测,left的值与宽度相等,刚好隐藏掉就可以。当鼠标经过时,再通过改变left的值使外层div显示出来。

<script type="text/javascript">
 window.onload=function(){
 var oBox=document.getElementById('box');
 var oShare=document.getElementById('share');
 var timer=null; //定义一个空的定时器
 function startmove(iTarget){
 var speed=0; //定义步长
 clearInterval(timer); //每次调用函数后,先执行关闭定时器的代码,目的是防止多次操作导致计时器叠加出现变速的Bug
 timer=setInterval(function(){
  if(oBox.offsetLeft<iTarget){ //目标值从事件调用函数中传入,当盒子左边距小于目标值时,说明还没移动到指定位置,让步长=10,往右运动
  speed=10;
  }
  else{ //否则就是超过了目标值,让步长=-10,往左运动
  speed=-10;
  }
  if(oBox.offsetLeft==iTarget){ //当盒子左边距等于目标值时,就关闭计时器
  clearInterval(timer);
  }
  else{
oBox.style.left=oBox.offsetLeft+speed+'px'; //盒子左边的距离,即移动的距离,注意加上单位;这个else分支也解决了一个bug:当满足条件停下来后,继续点击还会运动,所以加上else分支
  }
 },30)
 }
 //函数调用  
 oBox.onmouseover=function(){
 startmove(0);
 }
 oBox.onmouseout=function(){
 startmove(-200);
 }
}
</script>

这里要注意的几个点:

1、分析清楚offsetLeft与目标值的关系,什么时候步长为正,什么时候步长为负;

2、offsetLeft获取出来不带单位,所以在设置left的值时要记得加上单位。

容易出现的几个bug:

1、在设置步长时,当步长不能被整除,在关闭计时器的条件上写==,会出现盒子运动不停的bug,改为>=或者修改步长来修复Bug;

2.3、在注释里说明。

缓冲效果

原理:根据计算出的步长进行运动,大于0向左运动,小于0向右运动。缓冲运动不仅视觉上更和谐,而且也更为方便。

<script type="text/javascript">
 window.onload=function(){
 var oBox=document.getElementById('box');
 var timer=null;
 function startmove(iTarget){
  clearInterval(timer);
  timer=setInterval(function(){
  //求步长,为正向右移动,为负向左移动,10为自定义
  var speed=(iTarget-oBox.offsetLeft)/10; 
  //对步长取整,大于0向上取整,小于0向下取整,原因就是正数越来越大,负数越来越小
  speed=speed>0?Math.ceil(speed):Math.floor(speed); 
  //设置left的值
  oBox.style.left=oBox.offsetLeft+speed+'px';
  },30)
 }
 oBox.onmouseenter=function(){
  startmove(0);
 }
 oBox.onmouseleave=function(){
  startmove(-200);
 }
 }
</script>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
实例:用 JavaScript 来操作字符串(一些字符串函数)
Feb 15 Javascript
Ajax+Json 级联菜单实现代码
Oct 27 Javascript
jQuery 借助插件Lavalamp实现导航条动态美化效果
Sep 27 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
Mar 01 Javascript
AngularJS中指令的四种基本形式实例分析
Nov 22 Javascript
ionic2打包android时gradle无法下载的解决方法
Apr 05 Javascript
js通过Date对象实现倒计时动画效果
Oct 27 Javascript
JavaScript 有用的代码片段和 trick
Feb 22 Javascript
vue.js中$set与数组更新方法
Mar 08 Javascript
利用angular自动编译andriod APK的绕坑经历分享
Mar 08 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
Mar 24 Javascript
three.js如何实现3D动态文字效果
Mar 03 Javascript
Mongoose经常返回e11000 error的原因分析
Mar 29 #Javascript
js实现一个简单的数字时钟效果
Mar 29 #Javascript
jquery实现tab键进行选择后enter键触发click行为
Mar 29 #jQuery
Vue2组件tree实现无限级树形菜单
Mar 29 #Javascript
整理关于Bootstrap列表组的慕课笔记
Mar 29 #Javascript
Vue.js 插件开发详解
Mar 29 #Javascript
整理关于Bootstrap过渡动画的慕课笔记
Mar 29 #Javascript
You might like
小偷PHP+Html+缓存
2006/12/20 PHP
不错的PHP学习之php4与php5之间会穿梭一点点感悟
2007/05/03 PHP
Cannot modify header information错误解决方法
2008/10/08 PHP
php截取中文字符串不乱码的方法
2013/12/25 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
js 页面输出值
2008/11/30 Javascript
JavaScript 设计模式 安全沙箱模式
2010/09/24 Javascript
JS事件Event元素(兼容IE,Firefox,Chorme)
2012/11/01 Javascript
js onload处理html页面加载之后的事件
2013/10/30 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
Javascript对象字面量的理解
2016/06/22 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
2017/02/15 Javascript
Angularjs处理页面闪烁的解决方法
2017/03/09 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
浅谈Vue.js中的v-on(事件处理)
2017/09/05 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
2018/03/01 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
微信小程序新手教程之启动页的重要性
2019/03/03 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
微信小程序实现购物车小功能
2020/12/30 Javascript
Python使用Pycrypto库进行RSA加密的方法详解
2016/06/06 Python
python3中str(字符串)的使用教程
2017/03/23 Python
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
英国知名的护肤彩妆与时尚配饰大型综合零售电商:Unineed
2016/11/21 全球购物
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
大学生个人求职信范文
2013/09/21 职场文书
室内设计自我鉴定
2013/10/15 职场文书
迎八一活动主题
2014/01/31 职场文书
学校对教师的评语
2014/04/28 职场文书
敬老院献爱心活动总结
2014/07/08 职场文书
继承公证书格式
2015/01/26 职场文书
大学生个人学习总结
2015/02/15 职场文书
网络新闻该怎么写?这些写作技巧你都知道吗?
2019/08/26 职场文书
基于Redis延迟队列的实现代码
2021/05/13 Redis