`
redstarofsleep
  • 浏览: 443922 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

JS画线,虽然很原始,但是兼容所有浏览器

阅读更多

用Javascript画线的方法很多,有SVG,VML、canvas等,但是在现阶段,貌似这些方法都不能兼容所有浏览器。所以我还是用最原始的办法法写了一个画线方法。思路也很简单,就是用一个像素的DIV拼成一条线。

function line(startX, startY, endX, endY, container) {
	if (startX == endX) {
		if (startY > endY) {
			var tempY = startY;
			startY = endY;
			endY = tempY;
		}
		for (var k = startY; k < endY; k++) {
			createPoint(container, startX, k);
		}
	}
	// y = ax + b
	var a = (startY - endY) / (startX - endX);
	var b = startY - ((startY - endY) / (startX - endX)) * startX;
	if (Math.abs(startX - endX) > Math.abs(startY - endY)) {
		if (startX > endX) {
			var tempX = endX;
			endX = startX;
			startX = tempX;
		}
		var left = container.style.left;
		var top = container.style.top;
		for (var i = startX; i <= endX; i++) {
			createPoint(container, i, a * i + b);
		}
	} else {
		if (startY > endY) {
			var tempY = startY;
			startY = endY;
			endY = tempY;
		}
		for (var j = startY; j <= endY; j++) {
			createPoint(container, (j - b) / a, j);
		}
	}
	
}

function createPoint(container, x, y) {
	var node = document.createElement('div');
	node.className = 'line';
	node.style.marginTop = y;
	node.style.marginLeft = x;
	container.appendChild(node);
}

 

当然还需要一段CSS来控制样式:

div.line {
	position:absolute;
	z-index:2;
	width:1px;
	height:1px;
	font-size:1px;
	background-color:#0000FF;
	overflow:hidden;
}

 

来一段HTML测试一下

<html>
<head>
<script type="text/javascript" src="../js/jsline.js"></script>
<script type="text/javascript">
function testLine() {
	line(1, 2, 88, 88, document.getElementById('container'));
}
</script>
</head>
<body>
	<div id="container" style="width:400px;height:400px;border:1px solid #000000;margin-left:50px"></div>
	<input type="button" value="line" onclick="testLine();"></input>
</body>
</html>

 

最后还是希望HTML5早日普及,我这种写法早日淘汰!

15
9
分享到:
评论
6 楼 redstarofsleep 2011-07-04  
引用
你第一句话就是错的。
利用google excanvas。canvas已经可以运行在任何的浏览器上,包括ie6。
所以你的写法已经被淘汰

Google excanvas只是让IE支持canvas标签的一个库,又不是IE原生就支持咯。。
Google excanvas的原理是什么呢?他的核心是通过IE的VML去实现的。
5 楼 rainsilence 2011-07-03  
我实在是不想打击你。
引用
用Javascript画线的方法很多,有SVG,VML、canvas等,但是在现阶段,貌似这些方法都不能兼容所有浏览器。


你第一句话就是错的。
利用google excanvas。canvas已经可以运行在任何的浏览器上,包括ie6。
所以你的写法已经被淘汰
4 楼 j_butterfly 2011-06-29  
不错~~支持一下
3 楼 greatghoul 2011-06-29  
同好呀!!!

用JavaScript画直线、圆、椭圆(不用VML,Canvas) | #hta #javascript #2d
http://greatghoul.iteye.com/blog/612232

欢迎造访。
2 楼 redstarofsleep 2011-06-29  
引用
希望你能接受这种性能, 并且不知道你是否听说过VML和SVG

我写的第一句话就说的很清楚,这种方式只是为了兼容所有浏览器,性能当然是不能和其它三种方式比。
引用
用Javascript画线的方法很多,有SVG,VML、canvas等,但是在现阶段,貌似这些方法都不能兼容所有浏览器。
1 楼 DDT_123456 2011-06-29  
希望你能接受这种性能, 并且不知道你是否听说过VML和SVG

相关推荐

    兼容FireFox 用javascript写的一个画图函数

    虽然这种方法相对原始,但它有效地解决了跨浏览器兼容性问题,并为Web开发者提供了一种简单实用的解决方案。随着Web技术的发展,更高效和强大的绘图API(如Canvas API)逐渐成为主流选择,但了解这些基础的绘图原理...

    纯js的k线图demo,可以直接运行测试

    9. **浏览器兼容性**:考虑到不同的用户可能使用不同版本的浏览器,开发者需要确保这个纯JS的K线图在主流浏览器上都能正常运行。这可能涉及到对旧版浏览器的polyfill,或者利用像Babel这样的工具将现代JS语法转换为...

    鼠标悬停图片多种精美动画效果js代码.zip

    5. **兼容性考虑**:考虑到不同浏览器对JavaScript和CSS3的支持程度可能有差异,代码可能已经进行了相应的优化,确保在主流浏览器(如Chrome、Firefox、Safari、Edge等)上都能正常运行。此外,还可能包含了一些回退...

    js实现涂抹功能

    `raphael-min.js`则是Raphael库,它提供了在SVG和VML之间无缝切换的功能,使得代码能在所有主流浏览器上运行。 总的来说,实现JavaScript图片涂抹功能涉及到SVG、DOM操作、事件处理和可能的Canvas转换。使用Raphael...

    layer图片放大旋转IE8.rar

    在不支持CSS3的浏览器中,开发者可能需要使用JavaScript来改变图片的原始宽度、高度和位置,以模拟旋转效果。这可能涉及到数学计算,如弧度与角度转换,以及坐标轴的旋转。此外,可能还需要处理旋转后的图片边界溢出...

    javascript图形API库jsDraw2D

    6. **兼容性**:由于是基于JavaScript,jsDraw2D可以在几乎所有的现代浏览器上运行,包括桌面端和移动端。 **编程接口** jsDraw2D的核心在于其丰富的编程接口,开发者可以通过以下方式使用: - `createCanvas...

    js-spline:用于说明样条插值的 Javascript 库

    同时,确保你的环境支持JavaScript,可能还需要考虑兼容性问题,特别是对于旧版本的浏览器。 总之,js-spline库为JavaScript开发者提供了一种强大的工具,使他们能够在Web项目中轻松地实现样条插值,生成平滑的曲线...

    js 图象旋转算法及说明

    - **兼容性问题**:不同的浏览器和设备对图像处理的支持程度不同,需测试在多种环境下的表现,确保兼容性。 总之,JS图像旋转算法是网页图像处理中的一个重要组成部分,通过理解和掌握上述原理与实现细节,开发者...

    js调试工具

    所有主流浏览器(如Chrome、Firefox、Safari、Edge)都内置了强大的开发者工具,它们提供了丰富的JS调试功能。例如,Chrome的DevTools包括以下模块: - **Sources**:查看和编辑网页中的所有源代码,设置断点。 ...

    HTML5 CANVAS实现可调节参数的万花筒动画效果源码.zip

    - 可以借助库如Fabric.js或Pixi.js提供跨浏览器的支持。 总之,这个源码示例将展示如何利用HTML5 Canvas API创建动态的万花筒动画效果,并且允许用户通过调整参数来定制动画表现。通过学习和分析这段代码,开发者...

    JS鼠标拉动文字弹簧动画效果特效代码

    在JavaScript(JS)编程中,实现鼠标拉动文字弹簧动画效果是一种增强用户交互体验的独特方法。这种特效能够为网站或应用程序增添动态性和趣味性,让用户在与文字互动时感受到一种生动的视觉反馈。以下是对这个主题的...

    jQuery鼠标悬停导航底部动画效果

    - 考虑到浏览器兼容性和性能,可以使用CSS3的过渡效果来增强动画的流畅性。在CSS中设置适当的`transition`属性,可以配合jQuery的样式更改,实现更平滑的动画。 ```css .nav-item { transition: bottom 0.3s; /*...

    CSS3实现弹性动画展开菜单.rar_CSS3实现弹性动画展开菜单_css3展开动画_particlesdjv

    5. **优化与性能**:虽然CSS3动画性能通常很好,但在大量或复杂动画场景下,可能会影响页面性能。使用`requestAnimationFrame`或者Web Animations API可以提供更好的性能控制,尤其是在旧版浏览器中。 6. **兼容性*...

    jQuery+js 实现Table表格可任意拖动调整列宽度大小 适用于列表页等表头拖动宽度设置

    为了确保兼容性,我们需要测试这个功能在主流浏览器(如IE、Firefox、Chrome)中的表现。可能需要处理一些特定于浏览器的问题,例如IE可能需要使用不同的事件处理函数,或者在某些情况下需要使用CSS Hack来确保样式...

    css3表格列自由拖动排序js代码.zip

    考虑到浏览器兼容性,可能需要针对不同的浏览器实现相应的兼容代码。同时,为了优化性能,避免频繁的DOM操作,可以使用虚拟DOM或者局部更新的方法。 8. **用户反馈** 为了提供良好的用户体验,可以在拖动过程中...

    网站头伸缩广告

    6. **浏览器兼容性**:虽然现代浏览器对JavaScript和CSS3的支持良好,但为了覆盖更广泛的用户群体,我们需要关注老版本浏览器的兼容性问题。可以使用像Babel这样的工具将ES6+的语法转换为旧版JavaScript,同时使用...

    myflow流程图设计采用raphael的js文件未混淆

    Raphaël是一个强大的JavaScript库,它允许开发者在SVG(Scalable Vector Graphics)和VML(Vector Markup Language)格式之间无缝切换,以确保在所有现代和老式浏览器中的兼容性。Raphaël的核心功能包括创建形状、...

    web页面手写功能。

    它提供了一组绘图方法,如`beginPath()`, `moveTo()`, `lineTo()`, `stroke()`等,可以用来创建路径、画线、填充形状等,从而实现在canvas上绘制用户的手写轨迹。 4. **事件监听**:通过监听`mousedown`, `...

    javascript实现粘贴qq截图功能(clipboardData)

    虽然`clipboardData`对象在多数现代浏览器中都支持,但在使用过程中仍需要注意浏览器的兼容性问题。对于不支持`clipboardData`的旧版浏览器,可以考虑使用一些polyfills或者备用方案。 #### 9. 安全性和权限问题 ...

    javascript经典特效---图片全景旋转的技巧.rar

    8. **兼容性处理**:虽然现代浏览器对`&lt;canvas&gt;`和JavaScript的支持已经很好,但为了照顾到老版本浏览器,可以使用如Pixi.js、Three.js等库,它们提供了跨平台的解决方案,并封装了复杂的图形渲染。 实现全景图旋转...

Global site tag (gtag.js) - Google Analytics