1. 云栖社区>
  2. 技术文集>
  3. 列表>
  4. 正文

兼容标准XHTML的浮动层特效实现

作者:用户 来源:互联网 时间:2016-07-07 19:44:32

鼠标移动浮动documentwinndow onscrollwindow onscrollgetelementbyidonscroll事件onScrollonmousemove

兼容标准XHTML的浮动层特效实现 - 摘要: 本文讲的是兼容标准XHTML的浮动层特效实现, xhtml|标准|浮动|浮动层|特效   关键字: div, layer, absolute, 层, 移动, setCapture   1. 浮动层的显示、

xhtml|标准|浮动|浮动层|特效

  关键字: div, layer, absolute, 层, 移动, setCapture

  1. 浮动层的显示、移动

一个简单的例子:
<div id="mydiv" style="position:absolute;">my div contents</div>
<script language="javascript">
var dX = 10;
var dY = 10;
function mydivMove(x, y){
    var id = 'mydiv';
    if (document.layers){
        document.layers[''+id+''].left = x;
        document.layers[''+id+''].top = y;
    }
    else if (document.all){
        document.all[''+id+''].style.left=x;
        document.all[''+id+''].style.top=y;
    }
    else if (document.getElementById){
        document.getElementById(''+id+'').style.left=x+"px";
        document.getElementById(''+id+'').style.top=y+"px";
    }
}

mydivMove(dX,dY);
</script>

  主要的问题在于不同浏览器对于层的坐标获取方式不同,尤其要注意当通过getElementById来获取层坐标的时候(非IE浏览器),改变坐标的时候要加上"px"后缀,而不是直接进行数字赋值。

  2. 关于window.onscroll

g_myBodyInstance = (document.documentElement ? document.documentElement : window);
g_myBodyInstance.onscroll = mydivScrollFunc;

  上面的代码实现了兼容的onscroll事件处理。可以看到对于Firefox来说onscroll事件是隶属于document.documentElement对象而不是window对象。

  但似乎Firefox浏览器对于通过鼠标中键滚动页面的操作并不会去触发onscroll事件,而只有拖动右边的窗口滚动条才会触发,这给我带来极大的困扰,这样如果想要让用户浏览页面的任何时候某个浮动层(比如我的导航条)始终位于页面可见范围的话,就不得不使用setInterval或者setTimeout来不停的改变这个浮动层的位置。而不能采用触发onscrollonresize这两个事件进行显示位置重置。这显然是低效率的方法。幸好标准XHTML提供了一个CSS属性值,可以通过设置这个值来曲线达到目的:
<script>
var id = 'mydiv';
if (document.layers){
    document.layers[''+id+''].position = 'fixed';
}
else if (document.all){
    document.all[''+id+''].style.position='fixed';
}
else if (document.getElementById){
    document.getElementById(''+id+'').style.position='fixed';
}
</script>

  position的fixed属性让该层能够始终位于窗口的指定位置。从显示效果来看,在Firefox上的显示效果比IE中通过onscroll触发层的位置移动处理显示效果要好很多,看不到层的闪动。

  3. 关于onmousemove

对于IE来说,模拟鼠标拖放操作相关处理如下:
// 捕获鼠标移动
mydiv.setCapture();
document.onmousemove = mydivMoveFunc;
// 释放鼠标移动
mydiv.releaseCapture();
document.onmousemove = null;

对于Firefox浏览器来说,要这样处理:
// 捕获鼠标移动
window.captureEvents(Event.MOUSEMOVE);
window.onmousemove = mydivMoveFunc;
// 释放鼠标移动
window.releaseEvents(Event.MOUSEMOVE);
window.onmousemove = null;

  可见IE支持细化到某个层的事件捕获,而Firefox只能是捕获整个页面所有的相同事件。从实际显示效果来看,IE的表现出来的拖拉效果要明显好一些。关于完整的鼠标拖放的实现可以参见http://www.webjx.com/htmldata/2005-06-14/1118735650.html

  题外话:发现原来style="cursor:pointer;"才是标准用法,以前一直都写成style="cursor:hand;"的说,呵呵。



以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有 的相关内容,欢迎继续使用右上角搜索按钮进行搜索鼠标 , 移动 , 浮动 , document , winndow onscroll , window onscroll , getelementbyid , onscroll事件 , onScroll onmousemove ie8 浮动兼容性、文章浮动翻页特效、制作浮动窗口网页特效、图片浮动特效、网页特效浮动搜索栏,以便于您获取更多的相关知识。

php-PHP中怎样实现当鼠标放在图片上时,图片放大的效果

...方案五: 这个跟PHP毛关系都没有,这是一个客户端的特效,可以使用JS实现,或者你直接网上找JQ的这个图片放到特效,改下就可以了 解决方案六: 这个跟PHP毛关系都没有,这是一个客户端的特效,可以使用JS实现,或者...

jQuery实现的兼容性浮动层示例_jquery

本文实例讲述了jQuery实现的兼容性浮动层。分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: jQuery浮动层 #test { position: absolute; top: 10px; right: 10px; width: 430px; height: 300p...

js 遮罩效果

...作类似flash动画效果弹出层?jquery 弹出层 点击按钮弹出层兼容IE和firefox浏览器?jquery 弹出层插件 鼠标点击文字获取标题弹出层内容信息?jquery 弹出层插件 ThickBox 多功能弹出层插件支持图片、ajax、内嵌内容弹等?jquery 弹出层插件Fanc...

web前端开发课程分清优先和主次更快入门

...面的制作技术,确保能够完成微网站的制作,做到多设备兼容。 这一阶段通过静态网站类目开发,更好的掌握html5新增智能表单的使用,掌握响应式页面的布局技术和开发移动端web的应用。 第六阶段:特效开发高级实战,通过...

献给前端求职路上的你们(上)

...表(Cascading Style Sheets)对Web标准的理解、浏览器内核差异、兼容性、hack、CSS基本功:布局、盒子模型、浮动和定位、选择器优先级及使用、HTML5、CSS3、移动端适应 2、JavaScript ECMAScript标准规范,描述这门语言的实现细节和标准。 ...

前三篇
后三篇