鼠标滑过侧边弹出内容(JS)

效果展示

实现原理

  1. html结构:

1 <div id="contain">
2     <span id="share">分享</span>
3 </div>

  2. 外层div为要隐藏在左边的内容,要设置相对定位,并且left为负的容器宽度;鼠标可滑过的“分享”设置绝对定位,相对于外层div的位置可自定义(此处为居中)

  3. 运动函数:

    1)根据目标值和当前位置判断运动方向(设置定时器)

    2)设置运动速度

    3)根据当前位置和速度获取最新位置

    4)到达目标值后停止(清除定时器)

代码实现

HTML:

1 <div id="contain">
2     <span id="share">分享</span>
3 </div>

CSS:

 1 * {
 2     margin: 0;
 3     padding: 0;
 4 }
 5 #contain {
 6     width: 200px;
 7     height: 200px;
 8     position: relative;
 9     left: -200px;
10     top: 0;
11     background: pink;
12 }
13 #share {
14     width: 25px;
15     height: 50px;
16     position: absolute;
17     left: 200px;
18     top: 75px;
19     background: lightgreen;
20     text-align: center;
21     line-height: 25px;
22 }

JavaScript:

 1 window.onload = function (){
 2     oDiv = document.getElementById(‘contain‘);
 3     oDiv.onmouseover = function (){
 4         startMove(0);//0为目标值
 5     }
 6     oDiv.onmouseout = function (){
 7         startMove(-200);//-200为目标值
 8     }
 9 }
10 var timer = null;
11
12 function startMove(iTarget){//iTarget为offsetLeft目标值
13     //开始前清除所有定时器
14     clearInterval(timer);
15     var oDiv = document.getElementById(‘contain‘);
16     timer = setInterval(function(){
17         var speed = 0;
18         //判断运动方向和speed正负
19         if (oDiv.offsetLeft < iTarget) {//向右运动弹出
20             speed = 10;//设置定速
21             oDiv.style.left = oDiv.offsetLeft + speed + ‘px‘;//现在的位置加上改变的距离
22         }else if (oDiv.offsetLeft > iTarget) {
23             speed = -10;
24             oDiv.style.left = oDiv.offsetLeft + speed + ‘px‘;
25         }else {//oDiv.offsetLeft == iTarget时
26             clearInterval(timer);//到达目标值清除定时器
27         }
28     },30);
29 }

以上代码实现后效果如下图,物体为均速运动(speed=10),交互效果并不是最好,我们想实现的是变速运动,只需将定时器部分修改一下。

 1 function startMove(iTarget){//iTarget为offsetLeft目标值
 2     //开始前清除所有定时器
 3     clearInterval(timer);
 4     var oDiv = document.getElementById(‘contain‘);
 5     timer = setInterval(function(){
 6         //设置速度(分母越小速度越快)
 7         var speed = (iTarget - oDiv.offsetLeft) / 8;
 8         //负-->向下取整,正-->向上取整(未达到目标值时speed不能为0)
 9         //如果不取整最后会不能完全达到目标值(下面有效果图)
10         speed = speed < 0 ? Math.floor(speed) : Math.ceil(speed);
11         if (oDiv.offsetLeft == iTarget) {
12             //到达目标值清除定时器
13             clearInterval(timer);
14         }else {
15             //现在的位置加上改变的距离
16             oDiv.style.left = oDiv.offsetLeft + speed + ‘px‘;
17         }
18     },30);
19 }

至此就可以达到最初变速运动效果~



*变速运动中speed未取整时运动效果(下图)

上图可以发现元素中left的值不能达到0或-200。

*参考资料来源慕课网

*有错误的地方欢迎指正

*转载请注明出处

原文地址:https://www.cnblogs.com/tyouu/p/10642508.html

时间: 2024-10-14 21:05:20

鼠标滑过侧边弹出内容(JS)的相关文章

解决Bootstrap.用户界面架构视频中的popover鼠标滑过无法弹出提示框

<div class="container"> <h1 class="page-header">工具提示</h1> <p><a title="这是一个提示信息" rel="tooltip" href="#">Tooltip</a></p> <div class="arrow"></div

使用jqMobi开发app基础:弹出内容的设计

设计APP,由于屏幕很小,在PC网页山可以放在一体的内容,在APP中就不能放在一起了. 例如如下,项目出勤人员很多,需要弹出一个panel,然后让用户选择,如何设计呢? 项目出勤panel的内容: <div id="shenqingxiangmuchuqing" title="申请项目出勤" class="panel" data-load="loadshenqingxiangmuchuqingDetail" data-t

使用div+iframe实现弹窗及弹出内容无法显示的解决

使用div+iframe实现弹窗 除了使用实际的弹出窗口,还可以使用控制一个div的display属性来模拟一个弹出窗口的操作,这里使用在Div里放一个iFrame的方式,主要考虑到可以在需要的时候加载弹出窗口的内容,减少主窗口的数据量.通是还要考虑的一个问题就是用户在完成一次选择后,当重复打开选择框时,如何保存用户上次选择的状态:例如用户在弹出窗口中从A-E5个选项中选择了AB两个,当再次打开时,应该保证AB两个是选中的.首先来看弹出窗口的实现,html代码和脚本如下: html     <d

使用jsonp跨域调用百度js实现搜索框智能提示,并实现鼠标和键盘对弹出框里候选词的操作【附源码和在线测试地址】

项目中常常用到搜索,特别是导航类的网站.自己做关键字搜索不太现实,直接调用百度的是最好的选择.使用jQuery.ajax的jsonp方法可以异域调用到百度的js并拿到返回值,当然$.getScript也可以实现跨域调用js. jsonp快速入门: [原创]说说JSON和JSONP,也许你会豁然开朗,含jQuery用例 关于jquery.ajax的jsonp方法是用以及其error回调函数不能正确执行,请参考园长dudu的文章: jquery ajax中使用jsonp的限制 jQuery插件jQu

javascript 鼠标划词,弹出选取的词

很多时候,我们要使用到鼠标划词,然后获得划过的词文字内容,根据这个需求,写了如下代码,可以进行拓展. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="box"> 是客户端javascr

弹出层js让DIV居中

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

点击弹出序列号-JS

效果展示: 代码如下: @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index2</title> </head> <body> <div> <ul id="ul1&qu

菜单样式1:鼠标悬停向下弹出列表

JS部分: var qcloud={}; $('[_t_nav]').hover(function(){ var _nav = $(this).attr('_t_nav'); clearTimeout( qcloud[ _nav + '_timer' ] ); qcloud[ _nav + '_timer' ] = setTimeout(function(){ $('[_t_nav]').each(function(){ $(this)[ _nav == $(this).attr('_t_nav

Jquery实现鼠标hover图片遮罩弹出提示层特效

1.引入JS文件和所需要的样式文件 2.简单的写上以下18行代码就可以实现了 $(document).ready(function() { $("div.tip_trigger a.img").hover(function() { $(this).parent('div.tip_trigger').css({ 'background': '#8de08b', 'z-index': '1000' }); $('#h_coolsite .block').show(); tip = $(th