js飘窗

本次记录一下js实现飘窗代码遇到的问题,主要是将飘窗始终保持在可视区域内,实现ie低版本的兼容。

首先是实现飘窗问题,代码网上一查一大堆很容易实现飘窗,如我在网上找的一个例子:

var x = 50,y = 60
var xin = true, yin = true
var step = 1
var delay = 10
var obj=document.getElementById("specialdiv")
var userAgent=navigator.userAgent;
function floatwww_qpsh_com() {
var L=T=0

var R= document.body.clientWidth-obj.offsetWidth
var B = document.body.clientHeight-obj.offsetHeight
T=document.documentElement.scrollTop;
obj.style.left = x + document.body.scrollLeft+"px"
obj.style.top = y + document.body.scrollTop+"px"
x = x + step*(xin?1:-1)
if (x < L) { xin = true; x = L}
if (x > R){ xin = false; x = R}
y = y + step*(yin?1:-1)
if (y < T) { yin = true; y = T }
if (y > B) { yin = false; y = B }
}
var itl= setInterval("floatwww_qpsh_com()", delay)
obj.onmouseover=function(){clearInterval(itl)}
obj.onmouseout=function(){itl=setInterval("floatwww_qpsh_com()", delay)}

但是实现之后发现有些不符合我自己的预期,主要是body被内容填充的太长,一屏根本放不下,导致飘窗直接飘出视野了,知道碰到最底层的线才会往上走,查看代码,无非往下走什么时候返回是B的问题,往上走什么时候返回是T的问题,每次计算只要将B、T的值计算正确,飘窗就能按我们的意愿走,网上查了一下window.innerHeight是获取屏幕可视区域的高度,这个高度是可变的,比如你打开F12之后,它只显示内容区域的高度,scoll之后隐藏的区域不算,那如果下拉条下拉了一段距离,距离就应该是window.innerHeight+document.documentElement.scrollTop,使用document.documentElement.scrollTop是因为document.body.scrollTop的值始终为0,因为它的确从始至终没有发生scroll,因此设置B的值可以为:window.innerHeight+document.documentElement.scrollTop-obj.offsetHeight;,但ie的低版本浏览器不识别window.innerHeight,所以必须替换为:document.documentElement.clientHeight,因此设置B的值应该根据浏览器差异分别设置。

然后就是飘窗网上走的时候,什么时候往下返回,主要是设置T的值,幸运的是ie低版本也可以识别document.documentElement.scrollTop,所以直接将T=document.documentElement.scrollTop;

最终代码为:

var x = 50,y = 60
var xin = true, yin = true
var step = 1
var delay = 10
var obj=document.getElementById("你自己的ID")
var userAgent=navigator.userAgent;
function floatwww_qpsh_com() {
var L=T=0

var R= document.body.clientWidth-obj.offsetWidth
var B;
//var B = document.body.clientHeight-obj.offsetHeight
if(userAgent.indexOf("Chrome") > -1)
{
B= window.innerHeight+document.documentElement.scrollTop-obj.offsetHeight;
}
else
{
B=document.documentElement.clientHeight+document.documentElement.scrollTop-obj.offsetHeight;
}
T=document.documentElement.scrollTop;
obj.style.left = x + document.body.scrollLeft+"px"
obj.style.top = y + document.body.scrollTop+"px"
x = x + step*(xin?1:-1)
if (x < L) { xin = true; x = L}
if (x > R){ xin = false; x = R}
y = y + step*(yin?1:-1)
if (y < T) { yin = true; y = T }
if (y > B) { yin = false; y = B }
}
var itl= setInterval("floatwww_qpsh_com()", delay)
obj.onmouseover=function(){clearInterval(itl)}
obj.onmouseout=function(){itl=setInterval("floatwww_qpsh_com()", delay)}

原文地址:https://www.cnblogs.com/liujiekun/p/8877013.html

时间: 2024-11-06 03:48:33

js飘窗的相关文章

js控制下的飘窗

今天有学员反映说昨天去面试,有个考官问他会写飘窗吗?在反复的斟酌之后,她回答了不会.然后考官问她,有没有什么思路?她竟然说老师没教过!!! 到底还是小女生,其实考官的目的很明显,他的目的是想知道你的思考能力和解决问题的思路,毕竟不可能面试到的所有问题你都是接触过或研究过的. 最后重点说下,这个飘窗,小寻哥是真的教过,只不过当时觉得太简单,所以一笔带过,想不到啊,想不到啊... 早上一生气,特意带全班同学重新写了一遍,顺便贴上这处代码,其实很简单,重点的是思路,思路啊! <!DOCTYPE HTM

js实现网页飘窗

1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 4 <title>Jerory's code</title> 5 </head> 6 <body> 7 <div id="img" style="position: abso

网站飘窗js代码

<SCRIPT> var imagepath="/${res}/images/geren.jpg" ; var imagewidth=178 ;//这两行写图片的大小 var imageheight=80 ; var speed=2; var imageclick="http://www.baidu.com" ;//这里写点击图片连接到的地址 var hideafter=0 ; var isie=0; if(window.navigator.appNam

飘窗代码修改了一段js

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

Jquery 飘窗

1 <script type="text/javascript" src="jquery.js"></script> 2 <script type="text/javascript"> 3 (function($) { 4 $.fn.floatAd = function(options) { 5 var defaults = { 6 imgSrc:"", 7 url:""

左右飘窗代码研读

var browser={ ie6:function(){ return((window.XMLHttpRequest==undefined)&&(ActiveXObject!=undefined)) }, getWindow:function(){ var myHeight=0; var myWidth=0; if(typeof(window.innerWidth)=='number'){ myHeight=window.innerHeight; myWidth=window.inner

【API】高德地图API JS实现获取坐标和回显点标记

1.搜索+选择+获取经纬度和详细地址 2.回显数据并点标记 3.实现 第一步:引入资源文件 <!--引入高德地图JSAPI --><script src="//webapi.amap.com/maps?v=1.3&key=在官网申请一个key"></script><!--引入UI组件库(1.0版本) --><script src="//webapi.amap.com/ui/1.0/main.js">

js跨域

第一次写博客,好紧张,不知道能写成啥样,哈哈哈. 自己的一知片解,有错请多多指教,嘻嘻嘻. 一.何为跨域? 只要协议.域名.端口后任何一个不同,就是跨域. 举个例子: http://www.example.com 协议不同 https://www.example.com http://www.example.com 域名不同 http://www.test.com http://www.example.com 端口不同 http://www.example.com:81 注意:ip相同,域名不同

Vue.js学习笔记:属性绑定 v-bind

v-bind  主要用于属性绑定,Vue官方提供了一个简写方式 :bind,例如: <!-- 完整语法 --> <a v-bind:href="url"></a> <!-- 缩写 --> <a :href="url"></a> 绑定HTML Class 一.对象语法: 我们可以给v-bind:class 一个对象,以动态地切换class.注意:v-bind:class指令可以与普通的class特