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" οnclick="testLine();"></input>
</body>
</html>

 

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要获取设备的 DPI(每英寸像素数),目前没有一种方法能够兼容所有浏览器。不同浏览器提供的获取 DPI 的方式各不相同。以下是一种常见的获取 DPI 的方法: ```javascript function getDeviceDPI() { var dpi = 96; // 默认值 96dpi if (window.screen && window.screen.deviceXDPI && window.screen.logicalXDPI) { dpi = window.screen.deviceXDPI / window.screen.logicalXDPI * dpi; } else if (window.devicePixelRatio) { dpi = dpi * window.devicePixelRatio; } return dpi; } var deviceDPI = getDeviceDPI(); console.log(deviceDPI); ``` 在上述代码中,我们定义了一个 `getDeviceDPI` 函数来尝试获取设备的 DPI 值: - 首先,我们尝试使用 `window.screen` 对象提供的 `deviceXDPI` 和 `logicalXDPI` 属性。这些属性在IE浏览器中可用,可以用来获取设备的物理像素和逻辑像素的比例。通过计算比例并乘以默认的 96dpi,可以得到设备的 DPI 值。 - 如果上述属性不可用,则尝试使用 `window.devicePixelRatio` 属性。这个属性在大多数现代浏览器中可用,用来表示物理像素与逻辑像素之间的比例。通过将默认的 96dpi 乘以这个比例,可以得到设备的 DPI 值。 返回的结果是设备的 DPI 值,并将其打印到控制台上。 请注意,不同浏览器可能使用不同的属性或方法来获取 DPI 值。因此,以上方法仍然可能无法兼容所有浏览器。在实际应用中,最好根据目标浏览器进行测试和适配,或者使用第三方库来获取准确的 DPI 值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值