这里的html和css的代码是复制之前的随便匀速运动的,所以不需要改变
<!DOCTYPE html>
<html> <head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
font-size: 12px;
} div {
width: 200px;
height: 200px;
background: green;
position: relative;
left: -200px;
} span {
width: 30px;
height: 30px;
line-height: 30px;
background: red;
position: absolute;
left: 200px;
top: 85px;
text-align: center;
cursor: pointer;
}
</style>
</head> <body>
<div id="div">
<span id="show">show</span>
</div>
</body> </html>
js代码和之前的匀速运动的区别在于需要添加一个变量用来控制速度变化
<script>
function $(id) {
return typeof id === "string" ? document.getElementById(id) : id;
} window.onload = function() {
//变量定义区
var pto = $("div");
var btn = $("show");
var timer = null;
var speed = 0; //鼠标移动绑定事件
btn.onmouseenter = start; //函数用于调用定时器timer
function start() {
clearInterval(timer);
timer = setInterval(show, 30);
} //函数用于自动增加
function show() {
//speed是速度变量,用于控制窗口移动的速度
//这里的/20可以变为除任何数,主要为控制速度变化
speed = (0 - pto.offsetLeft) / 20;
//调用了Math方法,ceil是四舍五入取整
speed = Math.ceil(speed);
if (pto.offsetLeft == 0) {
clearInterval(timer);
} else {
pto.style.left = pto.offsetLeft + speed + 'px';
} } //鼠标移出绑定事件
btn.onmouseleave = back; //函数用于调用定时器timer
function back() {
clearInterval(timer);
timer = setInterval(clear, 30);
} //函数用于自动减少
function clear() {
speed = (-200 - pto.offsetLeft) / 20;
//调用了Math方法,floor是舍小数取整
speed = Math.floor(speed);
if (pto.offsetLeft == -200) {
clearInterval(timer)
} else {
pto.style.left = pto.offsetLeft + speed + 'px';
}
} }
</script>