模拟百度分享侧边栏的弹出与滑入效果。当鼠标移入#div1分享侧边栏,#div1分享侧边栏区块匀速滑出直至其全部露出。当鼠标移除#div1分享侧边栏,#div1分享侧边栏区块匀速滑入隐藏,直至恢复初始位置。若#div1区块未全部露出时,鼠标移出,#div1区块则开始滑入隐藏;若#div1区块未全部滑入隐藏,鼠标移入,则div1区块则开始匀速弹出。

<!DOCTYPE html>
<html> <head>
<title>JS运动框架案例:类百度分享制作</title>
<meta charset="UTF-8">
</head>
<style>
#div1 {
width: 150px;
height: 200px;
background: green;
position: absolute;
left: -150px;
top: calc(50% - 100px);
} #div1 span {
width: 20px;
height: 60px;
line-height: 20px;
right: -20px;
top: 70px;
background: blue;
position: absolute; } html,
body {
margin: 0;
padding: 0;
}
</style>
<script> // 补充代码 </script> <body> <div id='div1'>
<span>分享到</span>
</div>
</body> </html>

参考代码:

参考代码(1)以目标点作为参数,如果目标点为0,速度为正,目标点为-150,速度为负。如果运动抵达目标点,那么关闭定时器;否则left值发生变化。

function startMove(iTarget)
{
var oDiv=document.getElementById('div1'); clearInterval(timer);
timer=setInterval(function (){
var speed=0; if(oDiv.offsetLeft>iTarget)
{
speed=-10;
}
else
{
speed=10;
} if(oDiv.offsetLeft==iTarget)
{
clearInterval(timer);
}
else
{
oDiv.style.left=oDiv.offsetLeft+speed+'px';
}
}, 30);
}

参考代码(2)以每次运动的距离作为参数,鼠标移入参数为正,鼠标移除参数为负。

    window.onload = function () {
oDiv = document.getElementById('div1');
function startMove(speed) {
var iTarget = null;
clearInterval(oDiv.timer); oDiv.timer = setInterval(function () { if (speed > 0) { iTarget = 0; } else {
iTarget = -150;
} var l=Math.abs(iTarget-oDiv.offsetLeft);
var s=Math.abs(speed); if (l<=s) {
oDiv.style.left=iTarget+'px';
clearInterval(oDiv.timer); } else { oDiv.style.left = oDiv.offsetLeft + speed + 'px';
} }, 30); } oDiv.onmouseover = function () {
startMove(10)
}
oDiv.onmouseout = function () {
startMove(-10) } }

debug版本:为什么采用如下的代码,在弹出时,最终会多出10px距离?

    window.onload = function () {
oDiv = document.getElementById('div1');
function startMove(speed) { var iTarget = null;
clearInterval(oDiv.timer); oDiv.timer = setInterval(function () {
if (speed > 0) { iTarget = 0; } else {
iTarget = -150;
}
//bug:为什么在弹出时,会多出来10px?
if (speed > 0 && iTarget - oDiv.offsetLeft <= speed) { oDiv.style.left = iTarget + 'px'
clearInterval(oDiv.timer); } else { oDiv.style.left = oDiv.offsetLeft + speed + 'px';
} if (speed < 0 && iTarget - oDiv.offsetLeft >= speed) {
oDiv.style.left = iTarget + 'px'
clearInterval(oDiv.timer); } else { oDiv.style.left = oDiv.offsetLeft + speed + 'px';
} }, 30); } oDiv.onmouseover = function () {
startMove(10) }
oDiv.onmouseout = function () {
startMove(-10) } }

  debug代码:

    window.onload = function () {
oDiv = document.getElementById('div1');
function startMove(speed) { var iTarget = null;
clearInterval(oDiv.timer); oDiv.timer = setInterval(function () {
if (speed > 0) { iTarget = 0; } else {
iTarget = -150;
}
//bug:为什么在弹出时,会多出来10px?
/* 编码逻辑错误,应该采用if(){……}else if(){}语法,而不是并列的两个if(){……}else{……}。因为当判断语句【1】执行条件if满足时,同样满足判断语句【2】的else语句代码,导致多出来10px。
*
*/ // 当鼠标移入时,判断语句【1】,如果speed大于0且与目标点距离不大于speed时, oDiv.style.left直接设置为目标点并关闭定时器,否则继续运动。
if (speed > 0 && iTarget - oDiv.offsetLeft <= speed) { oDiv.style.left = iTarget + 'px'; clearInterval(oDiv.timer); } else { oDiv.style.left = oDiv.offsetLeft + speed + 'px';
}
// 当鼠标移出时, 判断语句【2】,如果speed小于0且与目标点距离不大于speed时, oDiv.style.left直接设置为目标点并关闭定时器,否则继续运动。
if (speed < 0 && iTarget - oDiv.offsetLeft >= speed) { oDiv.style.left = iTarget + 'px'; clearInterval(oDiv.timer); } else { oDiv.style.left = oDiv.offsetLeft + speed + 'px';
} }, 30); } oDiv.onmouseover = function () {
startMove(10) }
oDiv.onmouseout = function () {
startMove(-10) } }

  

JS模拟百度分享侧边栏效果的更多相关文章

  1. CSS实现模拟百度分享侧边栏效果

    在<JS模拟百度分享侧边栏效果>一文中对于Div区块的运动通过JS实现了鼠标移入滑出显示,鼠标移出滑入隐藏的效果.其实在CSS3中通过transition属性就可以较为轻松实现. < ...

  2. 前端 ---- js 模拟百度导航栏滚动案例

    模拟百度导航栏滚动监听 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta chars ...

  3. Vue.js模拟百度下拉框

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. js 模拟百度关键字搜索与跳转

    测试效果: css样式: ul{ display:none; } html代码: <input type="text" id="text" /> & ...

  5. 用于模拟百度分享的errno错误代码

    0:成功;-1:由于您分享了违反相关法律法规的文件,分享功能已被禁用,之前分享出去的文件不受影响.;-2:用户不存在;请刷新页面后重试;-3:文件不存在;请刷新页面后重试;-4:登录信息有误,请重新登 ...

  6. js模拟浏览器加载效果 pace.js 中文官方文档

    2017年2月20日12:11:25 官网URL:http://github.hubspot.com/pace/docs/welcome/ 文档 http://github.hubspot.com/p ...

  7. 原生JS模拟百度搜索关键字与跳转

    <style type="text/css"> *{ margin: 0; padding: 0; } #text{ width: 300px; height: 30p ...

  8. JS——模拟百度搜索

    注意事项: 1.for循环移除子节点时,其长度是变化的 2.在文档流中,input.img.p等标签与其他标签有3px的距离,利用左浮动,可以消除3px距离 3.背景图片定位时,第一个值是x轴方向的值 ...

  9. 第一百四十六节,JavaScript,百度分享保持居中--下拉菜单

    JavaScript,百度分享保持居中--下拉菜单 百度分享保持居中 效果图 html代码 <div id="share"> <h2>分享到</h2& ...

随机推荐

  1. JVM 第五篇:命令行 JVM 故障处理工具

    本文内容过于硬核,建议有 Java 相关经验人士阅读. 1. 引言 虽然我们前面介绍了各种图形化 JVM 故障处理工具,但是很多情况下,我们在处理问题的时候并没有图形化的操作环境可以使用,这时候,就需 ...

  2. Java结构体系

  3. 多测师讲解自动化--rf断言(下)--_高级讲师肖sir

    1.Page Should Contain 1.1存在页面上的内容 1.2 不存在页面上的内容, 运行抛异常 1.3 Page Should Not Contain 1.4 1.5 输入页面元素,判断 ...

  4. 多测师讲解_ 高级自动化测试selenium_001基本学习

    高级自动化测试python+selenium教程手册 --高级讲师肖sir 第 1 章webdriver 环境搭建好了,我们正式学习 selenium 的 webdriver 框架,它不像 QTP 之 ...

  5. MeteoInfoLab脚本示例:MERRA HDF数据

    MERRA是NOAA的一种再分析资料,HDF数据遵循COARDS协议,读取比较简单.脚本程序: #Add data file folder = 'D:/Temp/hdf/' fns = 'MERRA3 ...

  6. Jmeter创建随机数作为参数使用 转

    1.选项-函数值手对话框:2.选择适当的函数,比如"__Random()":3.输入参数,比如随机数的最大.最小数:4."Name of variable in whic ...

  7. 判断ip地址是属于国内还是国外

    一,如何判断一个ip地址是否属于国内? 我们以前使用淘宝提供的一个api地址进行判断,但经常出现打不开的报错, 因为只需要判断是国内或国外,于是考虑自己搞一个简单的. 分配给国内的ip地址在apnic ...

  8. matplotlib 饼状图

    import matplotlib.pyplot as plt import matplotlib as mpl # 支持中文 plt.rcParams['font.sans-serif'] = [' ...

  9. C#中的SqlBulkCopy批量插入数据

    在C#中,我们可以使用sqlBulkCopy去批量插入数据,其他批量插入方法不在讨论. 1 /// <summary> 2 /// SqlBulkCopy批量插入数据 3 /// < ...

  10. document.all.WebBrowser为空或不是对象

    项目中也想用这个功能,发现出错,经过测试,一定要加<object id="WebBrowser" width=0 height=0 classid="CLSID:8 ...