体验css+div 之 兼容标准XHTML的浮动层特效实现

Post by 张美工, 2008-9-22, Views:

  近日对自己的blog进行代码兼容性的改进,发现了原来的很多问题。之前修改了一些基本的CSS语法错误,基本实现了在IE和Firefox下页面观感上的一致。但对于一些js特效,尤其是浮动层的显示上面的问题,一直留着,今天才花功夫进行了修改,使得浮动层的滚动,鼠标拖放都得到了兼容处理。
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来不停的改变这个浮动层的位置。而不能采用触发onscroll、onresize这两个事件进行显示位置重置。这显然是低效率的方法。幸好标准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触发层的位置移动处理显示效果要好很多,看不到层的闪动。
 http://www.zeali.net/entry/62

相关文章:                                                 
 # Dreamweaver的超级技巧汇总(6)
# Dreamweaver的超级技巧汇总(5)
# Dreamweaver的超级技巧汇总(4)
# Dreamweaver的超级技巧汇总()
# Dreamweaver的超级技巧汇总(2)
# Dreamweaver的超级技巧汇总(1)
# 在线QQ MSN TEL交谈工具代码
# 方便使用的一些小简短input\form代码
# VSS使用手册
# JS表单判断函数代码大全 ()
# JS表单判断函数代码大全 ()
# JS表单判断函数代码大全 

#  I E和火狐的css兼容性问题归总

体验css+div 之 CSS hack:区分IE6,IE7,firefox

体验css+div 兼容标准XHTML的浮动层特效实现

因为编码差异 导致IE6不能正常解析CSS文件

#  商业网站响应用户需求重视与Firefox兼容


#  
frameset 的属性
frameset元素属性详解、浮动框架的制作、超链接与框架的制作


体验css+div 之 SEO

#  40个网页常用小代码

div+css样式几个小精华

网站用户体验--CSS常用小技巧

#  体验css+div css技巧-经典中的经典

#  体验css+div CSS样式表设计的十条技巧

体验css+div 网页切图过程中div+css命名规则

网站用户体验--根据项目需求定义 常用CSS2基本定义例子
#  体验css+div 三种使网站背景图片自动适应浏览器大小的方法


#  搜索

#  创建锚链接

#  如何让单行文本框input与多行文本框textarea背景透明

EditPlus转化文件格式到UTF-8
#  让长字符URL/Email自动换行

HTML特殊字符显示


#  体验css+div定位与table定位代码的差异
体验css+div 之 TBody是什么意思?有什么作用?<TBODY>和<BODY>有和区别?

体验css+div 简单的滑动门效果代码

#  体验css+div 超实用的滑动门效果代码(css和代码都包含在内)

彻底弄懂CSS盒子模式(DIV布局快速入门)

如何把握网页布局
实例详解CSS网页布局原理

体验CSS+DIV 基本布局

#  体验css+div 解决流体布局的问题
#  体验css+div 固定宽度布局、流体布局、弹性布局的优势对比<弹性布局>
#  
体验css+div 固定宽度布局、流体布局、弹性布局的优势对比<流体布局>
体验css+div 固定宽度布局、流体布局、弹性布局的优势对比<固定宽度布局>


#  体验css+div 为什么css+div 会盛行
#  体验css+div中id和class各自的用法及区别

体验css+div 规划、组织和维护样式表

体验css+div 基本列表样式

体验css+div 为样式找到目标


体验css+div 圆角框

体验css+div 层叠和特殊性
#  css之自动换行

#  CSS控制连续英文字母或数字强制换行

#  css使网页图片半透明

体验css+div 背景透明内容不透明的写法
体验css+div 给整个页面添加渐变背景
用css样式控制做成的按钮,取代图片按钮

体验css+div 鼠标经过按钮发生变化效果
体验css+div 文本框自适应窗口宽度
体验css+div 老问题重新讲“怎样使页面整体居中”
体验css+div之图像替换 1.徽标图像替换
体验css+div 使用自动空白边让设计居中
 

 

                                                                                                                   +     

Tags: javascript  浮动层 
分类:css+div | 评论:0 | 引用:0
上一篇:体验css+div 之 实现简单浮动层的基本方法
下一篇:网站用户体验 之 普通用户的神话

或许你还对下面的文章感兴趣

Comments

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

<#template:pagebar#>

最新文章

最新评论

Guest