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

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

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

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

首先,我们用两个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>

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

相关文章

wps文字180度倒转的设置方法

wps文字180度倒转的设置方法

方法,文字,设置,电脑软件,wps,  我们知道图片可以进行旋转,那么文字可以进行旋转吗?我们编辑文档想要文字倾斜显示应该怎样做呢?下面给大家分享wps设置文字倒转的方法。wps文字180度倒转的设置方法wps文字180度倒转的设置步骤1:首先我们写下…

angularjs下拉框空白的解决办法

angularjs下拉框空白的解决办法

下拉框,解决办法,空白,电脑软件,angularjs,搜索angularjs下拉框空白,可以出现很多解决方案,但是对于静态字段来说,网上目前还没有找到解决方案,如下:<select class="form-control" ng-model="UserState" ng-init="UserState=0"> <option …

excel中count if 函数的使用方法ex

excel中count if 函数的使用方法ex

函数,使用方法,电脑软件,count,excel,  Excel IF函数即count if 函数,运用它可以对一系列繁杂的数据进行筛选,得到自己想要的数据结果。今天,小编就教大家在Excel中count if 函数的使用方法。Excel中COUNTIF函数使用方法一(1) 求真空单元格…

微信小程序 数据遍历的实现

微信小程序 数据遍历的实现

遍历,数据,程序,电脑软件,微信小,制作数据遍历的步骤在index.js中加入数据。在index.wxml中读取数据。wx:for-item可以指定数组当前元素的变量名wx:for-index可以指定数组当前下标的变量名这两个项也可以不指定,默认数组的当前项的下标变量…

JS实现课堂随机点名和顺序点名

JS实现课堂随机点名和顺序点名

顺序,课堂,电脑软件,JS,1. 效果:2. Html代码:<body><form> <div align="center"> <input type="button" value="开始点名" onclick="students()" class="ks"/> <input type="button" value="停止点名" onclick="stop()…

PPT文本框如何设置框线的颜色

PPT文本框如何设置框线的颜色

文本框,设置,颜色,如何设置,电脑软件,  在ppt的工作中,要设置文本框的框线颜色,可能有些朋友还不知PPT文本框怎么设置框线的颜色。以下是小编为您带来的关于PPT文本框设置框线的颜色,希望对您有所帮助。PPT文本框设置框线的颜色1、打开PPT,进…

2017版qq申请qq号步骤怎么注册申请

2017版qq申请qq号步骤怎么注册申请

步骤,账号,注册,手机验证,电脑软件,  对于qq新手来说,怎么申请qq号是他们首先想知道的问题,那么如何注册申请QQ账号呢?下面是小编为大家精心整理的注册申请QQ账号的方法,仅供参考。2017版qq申请qq号步骤百度搜索《腾讯客服》点击下面带有官方…

Excel中进行表格内文字换行的操作

Excel中进行表格内文字换行的操作

文字,换行,操作方法,表格,操作步骤,  生活中不管是学习还是工作都会用到excel表格,在表格栏有时候字太长会有无法显示完全或者显示太过的情况,、今天,小编就教大家在Excel中进行表格内文字换行的操作方法。Excel中进行表格内文字换行的操作…

PS的替换颜色和色彩范围选取的方法

PS的替换颜色和色彩范围选取的方法

选取,替换,方法,色彩范围,颜色,  颜色调整命令都是我们需要经常用到的功能,今天小编带新手们了解一下这个颜色调整命令的用处是怎么样的!PS的替换颜色和色彩范围选取的方法这个颜色调整命令和色相/饱和度命令的作用是类似的,可以说它其实就…

在Excel 2007中怎样筛选出需要的表

在Excel 2007中怎样筛选出需要的表

表数据,筛选,电脑软件,Excel,  Excel的强大相信大家都是有所感受的,它可以一次存放很多数据,但有时我们只想看到其中的一部分,那么我们应该怎么把这些数据筛选出来呢?以下是小编为您带来的关于在Excel 2007中筛选出自己需要的表数据,希望对您…

qq开启DPI适配的教程具体是哪些DPI

qq开启DPI适配的教程具体是哪些DPI

教程,解决方法,文字,太小,电脑软件,  今天小编就给大家介绍一下QQ开启DPI适配的教程具体是哪些,希望能给大家一点福利!!!qq开启DPI适配的步骤将QQ界面和字体大小扩大,按比例放大。qq开启DPI适配的步骤1、若是刚刚更完QQ会弹出下面的提醒,但若是…

word文档打开出现应用程序错误怎么

word文档打开出现应用程序错误怎么

文档,程序错误,技巧,电脑软件,word,  大家都在使用word办公。但是有时不经意之间,我们一向得心应手的软件死活不听话。总要出些小错误。比如下面这种就是其中一种。错误:0x30d00777 指令引用0x0000003c内存,该内存不能为read 。下面解决大…