2010-04-24 29 views
7

Tôi sử dụng jqGrid với nhiều cột chứa thông tin boolean, được hiển thị dưới dạng hộp kiểm bên trong bảng (xem http://www.ok-soft-gmbh.com/VerticalHeaders/TestFixedO.htm làm ví dụ). Để hiển thị thông tin gọn hơn, tôi sử dụng tiêu đề cột dọc. Nó hoạt động rất tốt và hoạt động trong jqGrid trong tất cả các trình duyệt (xem thảo luận của tôi với Tony Tomov trong jqGrid forum http://www.trirand.com/blog/?page_id=393/feature-request/headers-with-vertical-orientation/), nhưng trong văn bản theo chiều dọc của IE bị mờ và không đủ đẹp (mở liên kết ở trên trong IE và bạn sẽ thấy chính xác ý tôi là gì). Tôi được hỏi từ người dùng tại sao văn bản được hiển thị quá lạ. Vì vậy, tôi đang nghĩ đến việc sử dụng thư viện SVG dựa trên JavaScript như SVG Web (http://code.google.com/p/svgweb/) hoặc Raphaël (http://raphaeljs.com/). SVG rất mạnh và rất khó tìm được một ví dụ điển hình. Tôi chỉ cần hiển thị văn bản dọc (-90 grad, từ dưới lên) và sử dụng nếu có thể mà không làm việc ở chế độ định vị tuyệt đối.Văn bản dọc bên trong tiêu đề bảng bằng thư viện SVG dựa trên JavaScript

Vì vậy, một lần nữa câu hỏi của tôi: tôi cần phải có một khả năng để hiển thị văn bản dọc (- 90 grad xoay) bên <td> yếu tố của một tiêu đề bảng. Tôi muốn sử dụng thư viện SVG dựa trên JavaScript như SVG Web hoặc Raphaël. Giải pháp phải hỗ trợ IE6. Có ai có một ví dụ tham khảo tốt mà có thể giúp tôi làm điều này? Nếu ai đó viết một giải pháp toàn bộ vấn đề tôi sẽ hạnh phúc.

Để được chính xác ở đây là giải pháp hiện tại của tôi: Tôi xác định

.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 */; 
} 

xác định RotateCheckboxColumnHeaders chức năng

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); 
       } 
      } 
     } 
    } 
}; 

Và bao gồm một cuộc gọi như RotateCheckboxColumnHeaders(grid, 110); sau khi tạo jqGrid.

+0

nếu bạn đang tìm kiếm giải pháp tương đương CSS3 có thể là trang web này sẽ giúp bạn http://www.useragentman.com/IETransformsTranslator/ tôi có thể thử tạo lại lưới của bạn và thử trong IE6 – paul

+0

@paul: Cảm ơn bạn đã tư vấn , nhưng tôi đã thử nghiệm 'DXImageTransform.Microsoft.Matrix' trước đây. Nó tạo ra kết quả tương tự như bộ lọc 'DXImageTransform.Microsoft.BasicImage (rotation = 3)' với cùng chất lượng.Nếu kích thước phông chữ là tương đối nhỏ everithing trông xấu. Hơn nữa, nếu một trong những cố gắng để quy mô trang, IE quy mô các hình ảnh xấu và không cố gắng để sản xuất các hình ảnh mới với chất lượng tốt hơn. Tất cả các trình duyệt khác tạo ra một kết quả hoàn hảo cũng có khả năng mở rộng hoàn hảo. Vì vậy, các problam ở lại mở ra. Ngay cả bản beta IE9 cũng không cho kết quả tốt hơn. – Oleg

+0

Làm cho mọi thứ hoạt động cho IE là một chút khó khăn .... Chúng tôi thường có một cơ chế dự phòng dưới dạng hình ảnh png. Vì vậy, đặt cược tốt nhất của bạn có thể là sử dụng hình ảnh png nếu svg không làm việc .... – paul

Trả lời

3

Dưới đây là một jsfiddle làm việc nào đó. Nó sẽ hoạt động trong IE 6, tôi chỉ sử dụng jquery và raphael js. Tôi đã thực hiện kích thước tĩnh cho khu vực vẽ raphael và các văn bản, nhưng bạn chắc chắn có thể làm một chút toán học để tìm ra kích thước động:

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

Mã trông như thế này nếu bạn bao gồm jquery và 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(); 
    }); 
}); 

và HTML trông như thế này:

<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> 

Oh, và tôi đã sử dụng điều này như ví dụ của tôi: http://raphaeljs.com/text-rotation.html

+0

Cảm ơn bạn đã trả lời! Vấn đề bây giờ không quá rõ ràng vì IE9 hỗ trợ 'ms-transform: rotate (-90deg);' hoạt động hoàn hảo (xem [demo] (http://www.ok-soft-gmbh.com/jqGrid/CheckboxesWithVerticalHeaders1. htm) từ [câu trả lời] (http://stackoverflow.com/questions/3974324/jqgrid-using-multiple-methods-to-filter-data/3979490#3979490)). Tuy nhiên có giải pháp làm việc trong IE6-IE8 sẽ tốt đẹp. Tôi đã đọc một số thời gian trước về plugin 'raphael' và muốn thử nghiệm nó. Nó sẽ được easer có câu trả lời của bạn. Tôi sẽ cố gắng tích hợp đề xuất của bạn trong jqGrid vào tuần tới. Cảm ơn! – Oleg

+0

Tuyệt vời, không sao cả. Và vâng, IE9 thay đổi mọi thứ. Nhưng đối với IE6, cá nhân tôi nghĩ raphael và SVG là những lựa chọn hấp dẫn duy nhất. Mặc dù, tôi là tất cả vì không hỗ trợ IE6 :) – Milimetric

+0

Tôi xin lỗi, rằng tôi quên đánh dấu câu trả lời là "được chấp nhận" trước đây. – Oleg

0

biến đổi văn bản Canvas dụ

  <!--[if IE]><script type="text/javascript" src="../excanvas.js"></script><![endif]--> 
<script type="text/javascript" src="../canvas.text.js"></script> 
<script type="text/javascript" src="../faces/dejavu_sans-normal-normal.js"></script> 
<script type="text/javascript" src="../faces/dejavu_sans-bold-normal.js"></script> 
    </head> 
    <body> 
      <canvas width="500" height="300" id="test-canvas" style="font-size: 16px;"></canvas> 

      <script type="text/javascript"> 
       function initCanvas(canvas) { 
        if (window.G_vmlCanvasManager && window.attachEvent && !window.opera) { 
         canvas = window.G_vmlCanvasManager.initElement(canvas); 
        } 
        return canvas; 
       } 

       window.onload = function() { 
        var canvas = initCanvas(document.getElementById("test-canvas")), 
           ctx = canvas.getContext('2d'); 

        ctx.strokeStyle = "rgba(255,0,0,1)"; 
        ctx.fillStyle = "rgba(0,0,0,1)"; 
        ctx.lineWidth = 1; 
        ctx.font = "20pt Verdana, sans-serif"; 
        ctx.strokeStyle = "#000"; 
        ctx.rotate(Math.PI/2); 
        ctx.fillText('Vertical', 0, 0); 
        ctx.restore(); 
       } 
      </script> 
    </body> 

+0

Tôi biết rằng vấn đề mà tôi yêu cầu có thể được giải quyết. Bạn đề xuất kỹ thuật HTML5. Nó trông gần với việc sử dụng thư viện SVG dựa trên JavaScript, nhưng các liên kết của bạn quá chung chung. Tôi cần ít nhất một ví dụ về cách sử dụng kỹ thuật này cho các văn bản được xoay. Bạn có thể cho tôi tham chiếu chính xác hơn không? Nó hoạt động cho IE6? – Oleg

+0

được cập nhật ngay bây giờ với mã mẫu – XGreen

+0

tìm thêm thông tin về http://code.google.com/p/canvas-text/ – XGreen

Các vấn đề liên quan