<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>js 飘窗</title> </head> <style> #roll { width: 192px; padding: 5px; border-radius: 5px; cursor: pointer; color: white; /* 渐变 */ background-image: linear-gradient(135deg, red, yellow); /* 阴影 */ box-shadow: 5px 5px 5px #888888; /* 绝对定位 */ position: fixed; } #roll p { margin: 0px; } #roll a { color: white; text-decoration: none; } #roll .close-btn { text-align: right; } </style> <body> <!--飘窗--> <div id="roll"> <p id="link"> 飘窗内容 </p> <p class="close-btn"> <span id="close">关闭</span> </p> </div> <script> // 创建对象直接量 var rolls = { // 获取id属性为roll的对象 link: document.getElementById("link"), // 获取id属性为roll的对象 close: document.getElementById("close"), // 获取id属性为roll的对象 roll: document.getElementById("roll"), // 初始状态下left属性的值 x: 100, // 初始状态下top属性的值 y: 300, // left变化幅度 statusX: 1, // top变化幅度 statusY: 1, // 定时器执行间隔时间 speed: 20, // 差值用来测算left属性值的极限 winW: document.documentElement.clientWidth - document.getElementById("roll").offsetWidth, // 差值用来测算top属性值的极限 winH: document.documentElement.clientHeight - document.getElementById("roll").offsetHeight, // 声明函数 Go: function () { // 设置div的left属性值 this.roll.style.left = this.x + 'px'; // 设置div的top属性值 this.roll.style.top = this.y + 'px'; // 如果statusX=1则每次减少1px,否则减少1px this.x = this.x + (this.statusX ? -1 : 1) // 如果left属性值小于0,也就是div要超出左边界了,就将statusX设置为0 if (this.x < 0) { this.statusX = 0 } // 如果top属性值大于winW,也就是div要超出右边界了,就将statusX设置为1 if (this.x > this.winW) { this.statusX = 1 } this.y = this.y + (this.statusY ? -1 : 1) if (this.y < 0) { this.statusY = 0 } if (this.y > this.winH) { this.statusY = 1 } } }; var interval = setInterval("rolls.Go()", rolls.speed); // onmouseenter属性:鼠标移动到元素上时触发 rolls.roll.onmouseenter = function () { console.log(1); clearInterval(interval) }; // onmouseleave属性:鼠标离开元素时触发 rolls.roll.onmouseleave = function () { console.log(2); interval = setInterval("rolls.Go()", rolls.speed) }; // 飘窗点击事件 rolls.link.onclick = function () { window.open("https://www.baidu.com/"); } // 关闭飘窗 rolls.close.onclick = function () { // 隐藏或直接移除dom元素 rolls.roll.style.display = "none"; // document.body.removeChild(document.getElementById("roll")); } </script> </body> </html>