2010-04-24 14 views
7

का उपयोग कर तालिका शीर्षकों के अंदर वर्टिकल टेक्स्ट मैं जूलग्रिड का उपयोग करता हूं जिसमें बूलियन जानकारी वाले कई कॉलम होते हैं, जिन्हें तालिका के अंदर चेकबॉक्स के रूप में प्रदर्शित किया जाता है (उदाहरण के रूप में http://www.ok-soft-gmbh.com/VerticalHeaders/TestFixedO.htm देखें)। अधिक कॉम्पैक्टली जानकारी प्रदर्शित करने के लिए मैं लंबवत कॉलम हेडर का उपयोग करता हूं। यह बहुत अच्छी तरह से काम करता है और सभी ब्राउज़रों में jqGrid में काम करता है (jqGrid फोरम http://www.trirand.com/blog/?page_id=393/feature-request/headers-with-vertical-orientation/ में टोनी टॉमोव के साथ मेरी चर्चा देखें), लेकिन आईई वर्टिकल टेक्स्ट में धुंधला है और पर्याप्त अच्छा नहीं दिख रहा है (आईई में ऊपर दिए गए लिंक को खोलें और आप बिल्कुल देखेंगे मेरा मतलब)। मुझे उपयोगकर्ताओं से पूछा गया कि टेक्स्ट इतनी अजीब तरह से क्यों प्रदर्शित हुआ। तो मैं एक जावास्क्रिप्ट-आधारित एसवीजी लाइब्रेरी जैसे एसवीजी वेब (http://code.google.com/p/svgweb/) या राफेल (http://raphaeljs.com/) का उपयोग करने की सोच रहा हूं। एसवीजी बहुत शक्तिशाली है और एक अच्छा उदाहरण खोजना मुश्किल है। मुझे केवल ऊर्ध्वाधर पाठ (-90 ग्रेड, नीचे से ऊपर) प्रदर्शित करने की आवश्यकता है और यदि पूर्ण स्थिति के मोड में काम किए बिना संभव हो तो उपयोग करें।जावास्क्रिप्ट-आधारित एसवीजी लाइब्रेरी

तो एक बार और मेरे सवाल: मैं खड़ी पाठ प्रदर्शित करने की संभावना की आवश्यकता है (- 90 स्नातक रोटेशन) एक मेज हेडर के <td> तत्वों के अंदर। मैं एक जावास्क्रिप्ट-आधारित एसवीजी लाइब्रेरी का उपयोग करना चाहता हूं जैसे एसवीजी वेब या राफेल। समाधान आईई 6 का समर्थन करना चाहिए। क्या किसी के पास एक अच्छा संदर्भ उदाहरण है जो मुझे ऐसा करने में मदद कर सकता है? अगर कोई समस्या का पूरा समाधान पोस्ट करता है तो मैं खुश रहूंगा।

यहाँ सटीक होना करने के लिए अपने मौजूदा समाधान है: मैं परिभाषित

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

और jqGrid बनाने के बाद RotateCheckboxColumnHeaders(grid, 110); की तरह एक फोन शामिल हैं।

+0

यदि आप CSS3 समकक्ष समाधान की तलाश में हैं तो यह साइट आपकी मदद करेगी http://www.useragentman.com/IETransformsTranslator/ मैं आपकी ग्रिड को फिर से बनाने की कोशिश कर सकता हूं और इसे IE6 – paul

+0

@paul में आज़मा सकता हूं: सलाह के लिए धन्यवाद , लेकिन मैंने पहले ही 'DXImageTransform.Microsoft.Matrix' का परीक्षण किया है। यह समान गुणवत्ता वाले 'DXImageTransform.Microsoft.BasicImage (रोटेशन = 3) 'फ़िल्टर के समान परिणाम उत्पन्न करता है।यदि फ़ॉन्ट का आकार अपेक्षाकृत छोटा सदाबहार खराब दिखता है। इसके अलावा यदि कोई पृष्ठ को स्केल करने का प्रयास करता है, तो IE खराब छवि को स्केल करता है और बेहतर छवि के साथ नई छवि का उत्पादन करने की कोशिश नहीं करता है। अन्य सभी ब्राउज़र एक आदर्श परिणाम उत्पन्न करते हैं जो कि सही स्केलेबल भी हैं। तो problam रहने के लिए खोला। यहां तक ​​कि आईई 9 बीटा भी बेहतर परिणाम नहीं देते हैं। – Oleg

+0

चीजों को आईई के लिए काम करना थोड़ा चुनौतीपूर्ण है .... हम आम तौर पर पीएनजी छवि के रूप में एक फॉलबैक तंत्र है। इसलिए, यदि आपकी एसवीजी काम नहीं करता है तो आपकी सबसे अच्छी शर्त पीएनजी छवियों का उपयोग कर सकती है .... – paul

उत्तर

3

यहाँ एक काम jsfiddle है कि यह करता है। इसे आईई 6 में काम करना चाहिए, मैंने केवल jquery और raphael js का उपयोग किया था। मैं राफेल ड्राइंग क्षेत्र और पाठ के लिए स्थिर आकार बना है, लेकिन आप निश्चित रूप से गतिशील आकार यह पता लगाने की एक छोटे से गणित कर सकते हैं:

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

कोड इस तरह दिखता है अगर आप jQuery और राफेल में शामिल हैं:

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

और एचटीएमएल इस तरह दिखता है:

<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

+0

आपके उत्तर के लिए धन्यवाद! समस्या अब इतनी तेज नहीं है क्योंकि आईई 9 'एमएस-ट्रांसफॉर्म का समर्थन करता है: घुमाएं (-90 डीईजी);' जो सही काम करता है (देखें [डेमो] (http://www.ok-soft-gmbh.com/jqGrid/CheckboxesWithVerticalHeaders1। एचटीएम) [उत्तर] से (http://stackoverflow.com/questions/3974324/jqgrid-using-multiple-methods-to-filter-data/3979490#3979490))। फिर भी आईई 6-आईई 8 में जो समाधान काम करता है वह अच्छा होगा। मैंने 'राफेल' प्लगइन से पहले कुछ समय पढ़ा और इसका परीक्षण करना चाहता था। आपका उत्तर आसान होगा। मैं अगले सप्ताह jqGrid में अपने सुझाव को एकीकृत करने की कोशिश करूंगा। धन्यवाद! – Oleg

+0

बहुत बढ़िया, कोई समस्या नहीं। और हाँ, आईई 9 सबकुछ बदलता है। लेकिन आईई 6 के लिए मैं व्यक्तिगत रूप से सोचता हूं कि राफेल और एसवीजी एकमात्र आकर्षक विकल्प हैं। हालांकि, मैं आईई 6 का समर्थन नहीं करने के लिए सभी हूं :) – Milimetric

+0

मुझे खेद है कि मैं जवाब को "स्वीकृत" के रूप में चिह्नित करना भूल गया था। – Oleg

0

कैनवास पाठ परिवर्तनों उदाहरण

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

मुझे पता है कि जिस समस्या के लिए मैंने पूछा था उसे हल किया जा सकता है। आप एचटीएमएल 5 तकनीक का सुझाव देते हैं। यह जावास्क्रिप्ट आधारित एसवीजी पुस्तकालय का उपयोग करने के करीब दिखता है, लेकिन आपके लिंक बहुत सामान्य हैं। घुमावदार पाठों के लिए मुझे इस तकनीक का उपयोग करने के लिए कम से कम एक उदाहरण की आवश्यकता है। क्या आप मुझे अधिक सटीक संदर्भ दे सकते हैं? क्या यह आईई 6 के लिए काम करता है? – Oleg

+0

अब कोड नमूना – XGreen

+0

के साथ अपडेट किया गया है http://code.google.com/p/canvas-text/ – XGreen