gpt4 book ai didi

javascript - 使用基于 JavaScript 的 SVG 库在表头内垂直文本

转载 作者:数据小太阳 更新时间:2023-10-29 04:48:40 26 4
gpt4 key购买 nike

我将 jqGrid 与许多包含 bool 信息的列一起使用,这些信息在表格内显示为复选框(参见 http://www.ok-soft-gmbh.com/VerticalHeaders/TestFixedO.htm 作为示例)。为了更紧凑地显示信息,我使用垂直列标题。它工作得很好,在所有浏览器的 jqGrid 中工作(请参阅我在 jqGrid 论坛中与 Tony Tomov 的讨论 http://www.trirand.com/blog/?page_id=393/feature-request/headers-with-vertical-orientation/ ),但在 IE 中垂直文本模糊并且看起来不够好(在 IE 中打开上面的链接你会明白我的意思)。用户问我为什么文本显示如此奇怪。所以我正在考虑使用基于 JavaScript 的 SVG 库,例如 SVG Web ( http://code.google.com/p/svgweb/ ) 或 Raphaël ( http://raphaeljs.com/ )。 SVG 非常强大,很难找到一个好的例子。我只需要显示垂直文本(-90 度,从下到上),并尽可能在不使用绝对定位模式的情况下使用。

我又问了一次:我需要能够在 <td> 中显示垂直文本(-90 度旋转)表头的元素。我想使用基于 JavaScript 的 SVG 库,例如 SVG WebRaphaël。该解决方案必须支持 IE6。有没有人有一个很好的引用示例可以帮助我做到这一点?如果有人发布问题的完整解决方案,我会很高兴。

确切地说,这是我目前的解决方案:我定义

.rotate 
{
-webkit-transform: rotate(-90deg); /* Safari 3.1+, Chrome */
-moz-transform: rotate(-90deg); /* Firefox 3.5+ */
-o-transform: rotate(-90deg); /* Opera starting with 10.50 */
/* Internet Explorer: */
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); /* IE6, IE7 */
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)" /* IE8 */;
}

定义RotateCheckboxColumnHeaders功能

var RotateCheckboxColumnHeaders = function (grid, headerHeight) {
// we use grid as context (if one have more as one table on tnhe page)
var trHead = $("thead:first tr", grid.hdiv);
var cm = grid.getGridParam("colModel");
$("thead:first tr th").height(headerHeight);
headerHeight = $("thead:first tr th").height();

for (var iCol = 0; iCol < cm.length; iCol++) {
var cmi = cm[iCol];
if (cmi.formatter === 'checkbox') {
// we must set width of column header div BEFOR adding class "rotate" to
// prevent text cutting based on the current column width
var headDiv = $("th:eq(" + iCol + ") div", trHead);
headDiv.width(headerHeight).addClass("rotate");
if (!$.browser.msie) {
if ($.browser.mozilla) {
headDiv.css("left", (cmi.width - headerHeight) / 2 + 3).css("bottom", 7);
}
else {
headDiv.css("left", (cmi.width - headerHeight) / 2);
}
}
else {
var ieVer = jQuery.browser.version.substr(0, 3);
// Internet Explorer
if (ieVer !== "6.0" && ieVer !== "7.0") {
headDiv.css("left", cmi.width / 2 - 4).css("bottom", headerHeight / 2);
$("span", headDiv).css("left", 0);
}
else {
headDiv.css("left", 3);
}
}
}
}
};

并包括像RotateCheckboxColumnHeaders(grid, 110);这样的电话创建 jqGrid 之后。

最佳答案

这是一个可以执行此操作的有效 jsfiddle。它应该在 IE 6 中工作,我只使用 jquery 和 raphael js。我为 raphael 绘图区域和文本制作了静态尺寸,但您当然可以做一些数学运算来计算动态尺寸:

http://jsfiddle.net/UYj58/9/

如果包含 jquery 和 raphael,代码看起来像这样:

$(document).ready(function(){
var font = {font: '12px Helvetica, Arial'};
var fill = {fill: "hsb(120deg, .5, 1)"}
$('tr th div').each(function (index, div){
R = Raphael($(div).attr('id'), 20, 100);
R.text(4, 50, $(div).find('span').text())
.attr(font)
.attr(fill)
.rotate(-90, true);
$(div).find('span').hide();
});
});

HTML 看起来像这样:

<table>
<thead>
<tr>
<th><div id="columnOne"><span>heading one</span></div></th>
<th><div id="columnTwo"><span>heading two</span></div></th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>4</td>
<td>5</td>
</tr>
</tbody>
</table>

哦,我用这个作为例子:http://raphaeljs.com/text-rotation.html

关于javascript - 使用基于 JavaScript 的 SVG 库在表头内垂直文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2705174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com