`
yiyu
  • 浏览: 186718 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ie和firefox上都运行流畅的网页分割条

阅读更多

这两天因工作需要做了一个网页分割条,期间碰到不少问题,好在最后都解决了,最后
版本在ie8和firefox3.5上都能流畅运行,现总结一下:

1. 拖动分割条的一个问题是要把鼠标的移动和释放事件不间断地捕获到并进行处理,当
鼠标快速移动时,要保证即使鼠标移出了分割条,进入页面其他元素的范围内,这些事
件也能被捕获到并进行相应的处理。在ie中,这需要使用setCapture()方法,拖动动作
完成后还要用releaseCapture()方法释放。但firefox不支持该方法,网上有的说可以
用window.captureEvents方法,但我在firefox中试过也不行,找了找资料据说这是
netscape的特性,firefox只实现了一个空的方法,并不起作用。firefox解决这一问题
的办法是按下分割条后,就将鼠标移动和释放的事件处理方法绑定到document上,然后
在鼠标释放的时候再进行移除。

2. 拖动分割条中碰到的第二个问题是,在firefox中,拖动很容易中断,可能是因为一
旦鼠标移出了分割条,相应的鼠标事件在某些情况下会被页面中的其他元素截留,这个
问题可以通过event的preventDefault()方法解决。

最后代码如下:
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=gbk">
		<style>
			.shadowDivA {
				overflow: scroll;
				width: 200px;
				height: 100%;
				position: absolute;
				top: 0px ; left : 0px;
				background-color: yellow;
				filter: alpha(opacity = 70);
				opacity: 0.7;
			}
			.shadowDivB {
				overflow: scroll;
				width: 500px;
				height: 100%;
				position: absolute;
				top: 0px ; left : 205px;
				background-color: blue;
				filter: alpha(opacity = 70);
				opacity: 0.7;
			}
			.shadowDivM {
				width: 5px;
				height: 100%;
				position: absolute;
				top: 0px ; left : 200px;
				background-color: grey;
				cursor:e-resize;
				filter: alpha(opacity = 70);
				opacity: 0.7;
			}
		</style>
		<script type="text/javascript"> 
			var flag = false ;
			var objSplitter = false;

			function down(event, obj){
				if(!flag){
					if(obj.setCapture)
						obj.setCapture();
					else {
						document.addEventListener('mouseup', up, true);
						document.addEventListener('mousemove', move, true);
						event.preventDefault();
					}

					flag = true ;
					objSplitter = obj;
				}
			}
			
			function up(event){
				if(flag){
					if(objSplitter.releaseCapture)
						objSplitter.releaseCapture();
					else {
						document.removeEventListener('mouseup', up, true);
						document.removeEventListener('mousemove', move, true);
						event.preventDefault();
					}

					flag = false ;
				}
			}

			function move(event){
				if(flag){
					var obj1 = document.getElementById("a") ; 
					var obj2 = document.getElementById("b") ;
					obj1.style.width = event.clientX + "px" ;
					obj2.style.left = (event.clientX + 5) + "px" ;
					obj2.style.width = (700 - event.clientX) + "px" ; 

					objSplitter.style.left = event.clientX + "px" ;
					if(!objSplitter.releaseCapture) {
						event.preventDefault();
					}
				}
			}
		</script> 
</head>

<body>
	<div id="a" class="shadowDivA">
	</div>
	<div class="shadowDivM" onmousedown="down(event, this);" onmouseup="up(event);" onmousemove="move(event);">
	</div>
	<div id="b" class="shadowDivB">
	</div>
</body>
</html>

分享到:
评论
8 楼 yiyu 2010-01-19  
哦,那些没改,加些判断就可以了
7 楼 dieslrae 2010-01-19  
IE8下还是拉出边界之后还是有问题
6 楼 yiyu 2010-01-19  
这个版本在ie6上也能跑

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=gbk">
		<style>
			.shadowDivA {
				overflow: scroll;
				width: 200px;
				height: 100%;
				position: absolute;
				top: 0px ; left : 0px;
				background-color: yellow;
				filter: alpha(opacity = 70);
				opacity: 0.7;
			}
			.shadowDivB {
				overflow: scroll;
				width: 500px;
				height: 100%;
				position: absolute;
				top: 0px ; left : 205px;
				background-color: blue;
				filter: alpha(opacity = 70);
				opacity: 0.7;
			}
			.shadowDivM {
				width: 5px;
				height: 100%;
				position: absolute;
				top: 0px ; left : 200px;
				background-color: #888888;
				cursor:e-resize;
				filter: alpha(opacity = 70);
				opacity: 0.7;
			}
		</style>
		<script type="text/javascript"> 
			var flag = false ;
			var objSplitter = false;

			function down(event, obj){
				if(!flag){
					if(obj.setCapture)
						obj.setCapture();
					else {
						document.addEventListener('mouseup', up, true);
						document.addEventListener('mousemove', move, true);
						event.preventDefault();
					}

					flag = true ;
					objSplitter = obj;
				}
			}
			
			function up(event){
				if(flag){
					if(objSplitter.releaseCapture)
						objSplitter.releaseCapture();
					else {
						document.removeEventListener('mouseup', up, true);
						document.removeEventListener('mousemove', move, true);
						event.preventDefault();
					}

					flag = false ;
				}
			}

			function move(event){
				if(flag){
					var obj1 = document.getElementById("a") ; 
					var obj2 = document.getElementById("b") ;
					obj1.style.width = event.clientX + "px" ;
					obj2.style.left = (event.clientX + 5) + "px" ;
					obj2.style.width = (700 - event.clientX) + "px" ; 

					objSplitter.style.left = event.clientX + "px" ;
					if(!objSplitter.releaseCapture) {
						event.preventDefault();
					}
				}
			}
		</script> 
</head>

<body>
	<div id="a" class="shadowDivA">
	</div>
	<div class="shadowDivM" onmousedown="down(event, this);" onmouseup="up(event);" onmousemove="move(event);">
	</div>
	<div id="b" class="shadowDivB">
	</div>
</body>
</html>
5 楼 yose 2010-01-19  
楼主能修正一下再贴上来吗?
我也学习学习
4 楼 yiyu 2010-01-18  
确实
把.shadowDivM的
background-color: grey;
改成
background-color: #888888;
就可以了,难道是ie6不支持grey这个颜色定义?
3 楼 liu_87663663 2010-01-18  
报告BUG: ie6下分隔条不能拖拽
2 楼 yiyu 2010-01-13  
呵呵,只是试一下分割条,没做边界值处理
谢了
1 楼 Rooock 2010-01-13  
报告BUG:
当分割条到黄色或者蓝色的边界时, 会出现参数无效的错误.

相关推荐

    详解主流浏览器多进程架构:Chrome、IE

    ### 详解主流浏览器多进程架构:Chrome、IE 随着互联网技术的飞速发展,Web浏览器已成为...无论是Chrome、IE还是Firefox,都在不断优化其多进程架构,以应对日益复杂的网络环境,为用户提供更加安全、流畅的上网体验。

    JavaScript before-after焦点图插件,可以拖动分割条查看对比图片,兼容主流浏览器

    6. **浏览器兼容性**:提到插件兼容主流浏览器,这意味着开发者可能使用了polyfill或条件语句来确保在不同浏览器环境下(如Chrome、Firefox、Safari、Edge和旧版IE)的正常运行。 7. **readme.md**:这个文件通常是...

    334_HTML手机电脑网站_网页源码移动端前端_H5模板_自适应响应式源码.zip

    7. 跨浏览器兼容性:一个好的HTML5模板会考虑到不同浏览器之间的差异,确保在主流浏览器(如Chrome、Firefox、Safari、Edge和IE11)上都能正常工作。这通常需要对CSS和JavaScript进行适当的前缀处理和错误处理。 8....

    网页视频保存

    这个程序会列出所有浏览器(如Chrome、Firefox、IE等)的视频缓存信息。 2. **查看缓存**:程序会显示一个表格,包含每个视频文件的URL、大小、开始时间、结束时间等信息。你可以根据这些信息筛选出你想要的视频。 ...

    170_HTML手机电脑网站_网页源码移动端前端_H5模板_自适应响应式源码.zip

    7. 兼容性测试:由于不同浏览器对新技术的支持程度不同,此模板可能经过了广泛的浏览器兼容性测试,确保在主流浏览器(如Chrome、Firefox、Safari、Edge和IE11)中都能正常工作。 8. 可维护性和可扩展性:一个高...

    浏览器测试页面

    浏览器测试页面是一个重要的工具,用于确保网页在不同的浏览器和设备上都能正常显示和运行。它涵盖了多种技术,包括HTML、CSS、JavaScript以及浏览器兼容性测试。以下是对这一主题的详细阐述: 1. HTML(HyperText ...

    37_HTML手机电脑网站_网页源码移动端前端_H5模板_自适应响应式源码.zip

    9. **跨浏览器兼容性**:源码应能良好运行在主流浏览器上,如Chrome、Firefox、Safari、Edge和旧版IE。 10. **可维护性和扩展性**:良好的代码结构和注释,方便后续修改和添加功能。 以上就是关于这个压缩包可能...

    JS代码判断IE6,IE7,IE8,IE9的函数代码

    这三种方法都能有效地检测IE6、IE7、IE8和IE9,但随着技术的发展,IE浏览器的市场份额已经大大减少,现代浏览器如Chrome、Firefox、Safari和Edge等已经具备更好的兼容性和性能。因此,在开发时,建议优先考虑使用更...

    海康web版本开发文档

    而对于浏览器的兼容性,它支持IE6至IE11,Chrome8及更高版本,Firefox3.5及以上版本和Safari5.0.2以上版本,但目前只支持32位的浏览器。 ### 版本更新和新增功能 文档中提及的版本更新涉及到新接口的增加和既有接口...

    很全面的网站后台框架

    这个描述表明该后台框架已经经过测试,能在主流浏览器如Internet Explorer和Firefox的不同版本上正常运行,降低了开发者处理浏览器兼容性问题的难度。 “也是很好的代码例子”意味着这个框架不仅可以作为实际项目的...

    IEwebcontrols

    5. **兼容性与性能**:控件集经过优化,能在多种浏览器(包括IE、Firefox、Chrome等)中良好运行,同时保持高性能,降低了服务器的负载。 6. **丰富的API与文档**:IEWebControls提供了详细的API参考文档,以及示例...

    Web3.0_控件开发包编程指南_20201102162751.pdf

    支持的浏览器版本包括IE8至IE11、Chrome31+、Firefox35+等32位浏览器,以及IE8至IE11、Chrome31至Chrome44、Firefox35至Firefox51等64位浏览器。 **支持设备** 海康威视Web控件V3.0支持多种设备,包括DVR、NVR、DVS...

    echarts.rar

    ECharts兼容多种浏览器,包括Chrome、Firefox、Safari、Edge等,并且支持IE9及以上的版本。同时,ECharts也考虑到了移动设备的适配,能够在手机和平板等触屏设备上良好运行。此外,ECharts还集成了ZRender,一个轻量...

    中文转拼音-小字英文字母

    描述中提到“支持CHROME Firefox IE 360”,这表明该资源可能是一个浏览器插件或JavaScript库,能够兼容这些主流的Web浏览器,包括Chrome、Firefox以及360浏览器(基于IE内核)。这使得用户能够在网页端方便地实现...

    frameset2

    因为frameset在不同浏览器中的表现可能有所不同,所以文章可能讨论了如何确保在多种浏览器环境下,如IE、Firefox、Chrome等,框架集的正确显示和功能。此外,还可能涉及HTTP响应头和MIME类型在处理框架内容时的作用...

    fckeditor HTML在线编辑器

    它支持多种浏览器,如IE、Firefox、Chrome和Safari等,具有良好的跨平台兼容性。fckeditor-java-2.4.1版本是针对Java环境的一个集成包,包含了运行FCKeditor所需的Java组件。 **2. Java集成** 在Java应用中集成...

    海康web控件3.0开发文档

    兼容的浏览器有IE6~IE11、Chrome8+、Firefox3.5+和Safari5.0.2+,不过当前版本仅支持32位浏览器。 3. 版本更新: 文档中提到了一些重要的版本更新点,比如改进了插件安装检测接口,增加了插件初始化接口的属性,...

    dhtmlxSuite较成熟JS框架

    1. **跨浏览器兼容性**:dhtmlxSuite支持所有主流浏览器,包括IE、Firefox、Chrome、Safari和Opera,确保在不同环境下稳定运行。 2. **响应式设计**:框架内建了适应不同设备和屏幕尺寸的能力,使得在手机、平板和...

    JavaScript语言教程:JavaScript简单介绍

    - **SpiderMonkey**:Firefox浏览器中的JavaScript引擎。 - **其他引擎**:包括IE中的“Trident”、“Chakra”,Microsoft Edge中的“ChakraCore”,Safari中的“Nitro”和“SquirrelFish”等。 #### 四、...

    前端面试题之浏览器Browser相关题集.zip

    常见的浏览器内核有Trident(IE)、Gecko(Firefox)、Blink(Chrome、Opera)和Webkit(Safari)。其中,Blink和Webkit都是基于KHTML和JavaScriptCore的开源项目,它们之间的关系以及它们如何影响页面渲染速度和...

Global site tag (gtag.js) - Google Analytics