转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
兼容标准XHTML的浮动层特效实现         ★★★★

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:658 更新时间:2009/4/23 11:12:56

  关键字: 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;"的说,呵呵。



没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台