一个可以从左上角开始,往右下角移动,碰到屏幕边界时会往相反方向移动,鼠标放上去会停止移动,鼠标移开会继续移动,点击图片会跳转到相应的页面的广告效果
效果图:
代码部分:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
* {
margin: 0;
padding: 0;
}
div {
width: 300px;
height: 230px;
left: 0;
top: 0;
position: absolute;
}
img {
width: 300px;
height: 230px;
}
#del {
width: 50px;
height: 20px;
position: absolute;
top: 230px;
right: 0;
border: 1px black solid;
}
</style>
</head>
<body>
<div id="box">
<a href="https://blog.youkuaiyun.com/zzz18789?spm=1010.2135.3001.5343">
<img src="img/4.jpg">
</a>
<a href="#" id="del">X 关闭</a>
</div>
<script>
var box = document.getElementById('box');
var del = document.getElementById('del');
//盒子需要移动的距离
box.speedX = 1;
box.speedY = 1;
//移动函数
function move() {
//获取旧left和top值
var oldleft = parseInt(getComputedStyle(box)["left"]);
var oldtop = parseInt(getComputedStyle(box)["top"]);
//使用边界检测函数
check_border_collision(box)
//新距离 = 旧距离 + 新距离
//比如刚开始是0,那新距离就是0+1=1 每次都移动1px
var newleft = oldleft + box.speedX;
var newtop = oldtop + box.speedY;
box.style.left = newleft + 'px';
box.style.top = newtop + 'px';
}
//边界检测函数
function check_border_collision(el) {
var style = window.getComputedStyle(el);//获得样式
//把距离和高宽转换为整型并赋值给变量
var left = parseInt(style.left);
var top = parseInt(style.top);
var w = parseInt(style.width);
var h = parseInt(style.height);
if (left > window.innerWidth - w) { //如果到达了最右边,把方向改为负数,及反方向
el.speedX *= -1;
}
if (left < 0) { //到达左边把负数变为正数
el.speedX *= -1;
}
if (top > window.innerHeight - h - 20) {
el.speedY *= -1;
}
if (top < 0) {
el.speedY *= -1;
}
}
var timer = null; //计时器
//计时器开始函数
function start() {
timer = setInterval(() => {
move()
}, 1);
}
//初始化函数
function init() {
//先清空计时器,以防每次鼠标移开启动定时器时增加计时器
clearInterval(timer)
box.onmouseout=()=>{ //鼠标移开事件
start()
}
box.onmouseover=()=>{ //鼠标移入事件
clearInterval(timer)
}
start();
del.onmousedown=()=>{ //关闭按钮
box.parentNode.removeChild(box);
}
}
init()
</script>
</body>
</html>