效果展示

实现原理

  1. html结构:

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

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

  3. 运动函数:

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

    2)设置运动速度

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

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

代码实现

HTML:

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

CSS:

 * {
margin:;
padding:;
}
#contain {
width: 200px;
height: 200px;
position: relative;
left: -200px;
top:;
background: pink;
}
#share {
width: 25px;
height: 50px;
position: absolute;
left: 200px;
top: 75px;
background: lightgreen;
text-align: center;
line-height: 25px;
}

JavaScript:

 window.onload = function (){
oDiv = document.getElementById('contain');
oDiv.onmouseover = function (){
startMove(0);//0为目标值
}
oDiv.onmouseout = function (){
startMove(-200);//-200为目标值
}
}
var timer = null; function startMove(iTarget){//iTarget为offsetLeft目标值
//开始前清除所有定时器
clearInterval(timer);
var oDiv = document.getElementById('contain');
timer = setInterval(function(){
var speed = 0;
//判断运动方向和speed正负
if (oDiv.offsetLeft < iTarget) {//向右运动弹出
speed = 10;//设置定速
oDiv.style.left = oDiv.offsetLeft + speed + 'px';//现在的位置加上改变的距离
}else if (oDiv.offsetLeft > iTarget) {
speed = -10;
oDiv.style.left = oDiv.offsetLeft + speed + 'px';
}else {//oDiv.offsetLeft == iTarget时
clearInterval(timer);//到达目标值清除定时器
}
},30);
}

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

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

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


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

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

*参考资料来源慕课网

*有错误的地方欢迎指正

*转载请注明出处

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

  1. jquery打造一款侧边弹出的垂直导航

    这是一款利用jquery动画特效和css打造的侧边弹出垂直导航,整个弹出过程比较流畅,而且代码很简单,如果你正在寻找一款带动画的垂直导航,那么可以试试这个.下面是在线demo HTML源码: 1 2 ...

  2. 右上角鼠标滑过展开收缩动画效果js代码的演示页面

    http://files.cnblogs.com/files/tanlingdangan/top_right.rar.gz 右上角鼠标滑过展开收缩动画效果js代码的演示页面http://www.51x ...

  3. 将鼠标移到文本弹出一些字幕CSS达到,不及格JS达到

    使用css实施内容流行,否js代码,下面的代码,可直接使用复制, 需要背景图到下面的地址下载,谢谢! 住址:http://download.csdn.net/detail/zurich1979/722 ...

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

    项目中常常用到搜索,特别是导航类的网站.自己做关键字搜索不太现实,直接调用百度的是最好的选择.使用jquery.ajax的jsonp方法可以异域调用到百度的js并拿到返回值,当然$.getScript ...

  5. CSS实现鼠标经过网页图标弹出微信二维码

     特点 1.纯CSS实现二维码展示功能,减少加载JS: 2.使用CSS3 transform 属性: ## 第一步 在需要展示二维码的地方添加如下代码,其中<a>标签内容可以根据需要修改成 ...

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

    设计APP,因为屏幕非常小.在PC网页山能够放在一体的内容.在APP中就不能放在一起了. 比如例如以下.项目出勤人员非常多,须要弹出一个panel.然后让用户选择,怎样设计呢? 项目出勤panel的内 ...

  7. bootstrap里面的popover组件如何使鼠标移入可以对弹出框进行一系列的操作

    在bootstrap里面,有一个组件很可爱,它就是popover,它是对标签title属性的优化,奉上连接一枚:http://docs.demo.mschool.cn/components/popov ...

  8. 织梦建站:视频弹出播放JS+CSS

    需要 jquery.js 文件,JS代码一定要放在HTM下面,否则没效果罗! CSS代码: 1.fdspbf{ width:650px; height:550px; position:fixed; l ...

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

    使用div+iframe实现弹窗 除了使用实际的弹出窗口,还可以使用控制一个div的display属性来模拟一个弹出窗口的操作,这里使用在Div里放一个iFrame的方式,主要考虑到可以在需要的时候加 ...

随机推荐

  1. 第78节:Java中的网络编程(上)

    第78节:Java中的网络编程(上) 前言 网络编程涉及ip,端口,协议,tcp和udp的了解,和对socket通信的网络细节. 网络编程 OSI开放系统互连 网络编程指IO加网络 TCP/IP模型: ...

  2. Ansible工具原理一

    ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命 ...

  3. vue脚手架中使用axios

    虽然之前用过n次,但大多都是直接在页面中引入axios.js的.今天想换种方式使用,一时间竟不知道怎么配置了.特此记录下. 1.npm 安装axios,文件根目录下安装,指令如下:  npm inst ...

  4. Spring Boot 返回 XML 数据,一分钟搞定!

    Spring Boot 返回 XML 数据,前提必须已经搭建了 Spring Boot 项目,所以这一块代码就不贴了,可以点击查看之前分享的 Spring Boot 返回 JSON 数据,一分钟搞定! ...

  5. Nuxt 2 即将来临

    原文出处: 

  6. DedeCMS上传视频

    DedeCMS建站方便快捷,但是在上传视频时会出现问题,主要是文件格式与大小限制,需要修改配置文件,修改的地方主要有: 1.修改 DedeCMS系统配置参数--附件设置--允许的多媒体软件类型(以MP ...

  7. OS之进程管理---多线程模型和线程库(POSIX PTread)

    多线程简介 线程是CPU使用的基本单元,包括线程ID,程序计数器.寄存器组.各自的堆栈等,在相同线程组中,所有线程共享进程代码段,数据段和其他系统资源. 传统的的单线程模式是每一个进程只能单个控制线程 ...

  8. php5.5+apache2.4+mysql5.7在windows下的配置

    apache2.4下载和安装 下载apache2.4 https://www.apachelounge.com/download/VC11/ 提取解压目录Apache24到d:/dev/Apache2 ...

  9. [java核心篇02]__内部类

    前言 其实我们在前面已经初步接触到内部类了,但是我们去对它的作用并不胜了解.只是简单的知道了类的定义也是可以嵌套的,定义在一个类里面的类就是内部类. class out{ private String ...

  10. [NewLife.XCode]数据初始化

    NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示 ...