使用CSS3和IE8支持的圆弧形文本

10

我尝试使用CSS3属性给文本创建弧形,并更改JS以支持IE8。但是这并没有起作用。

this.$letters.each(function (i) {
    var $letter = $(this),
        transformation = (_self.options.radius === -1) ? 'none' : 'translateX(' + $letter.data('x') + 'px) translateY(' + $letter.data('y') + 'px) rotate(' + $letter.data('a') + 'deg)',
        transition = (animation) ? 'all ' + (animation.speed || 0) + 'ms ' + (animation.easing || 'linear') : 'none';


    filterIE = 'M11=' + $letter.data('x') + ', M21=' + $letter.data('y') + ',rotation=' + $letter.data("a") + 'deg'; // js function for supporting ie8
    //alert(filterIE);
    $letter.css({
        '-webkit-transition': transition,
        '-moz-transition': transition,
        '-o-transition': transition,
        '-ms-transition': transition,
        'transition': transition
    })
    .css({
        '-webkit-transform': transformation,
        '-moz-transform': transformation,
        '-o-transform': transformation,
        '-ms-transform': transformation,
        'transform': transformation,
        'filter': "progid:DXImageTransform.Microsoft.Matrix(" + filterIE + ")"  // js function for supporting ie8
    });

    function getIEVersion() {
        var rv = -1; // Return value assumes failure.
        if (navigator.appName == 'Microsoft Internet Explorer') {

            var ua = navigator.userAgent;
            var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
            if (re.test(ua) != null)

                rv = parseFloat(RegExp.$1);
        }
        return rv;
    }


    function checkVersion() {
        var ver = getIEVersion();

        if (ver != -1) {
            if (ver <= 9.0) {
                //.css("-ms-filter","progid:DXImageTransform.Microsoft.Matrix(M11=1.4488887394336025, M12=-0.388228567653781, M21=0.388228567653781, M22=1.4488887394336025, SizingMethod='auto expand')"
                //);// do something
            }
        }
    }

    checkVersion();
});

加粗的文本已经对我的js函数进行了更改。有人能帮我吗?我已经在jsfiddle上制作了一个演示。

2个回答

1

由于该问题是在2013年提出的,IE8正在迅速退出舞台,因此我想提供一个令人惊叹的弧形文本CSS生成器链接: http://csswarp.eleqtriq.com/


0

你的IE转换代码有误。应该像这样:

var cos = Math.cos;
var sin =Math.sin;
var deg2rad = 180 * Math.PI;
var filterIE = 'M11=' + ($letter.data('x')+cos($letter.data("a")/deg2rad)) + ',M12=' + sin($letter.data("a")/deg2rad) + ', M21=' + ($letter.data('y')-sin($letter.data("a")/deg2rad)) + ',M22=' + cos($letter.data("a")/deg2rad) + ',sizingMethod=\'auto expand\''

此外,IE9+支持CSS3变换。您只需要使用-ms-前缀即可。

谢谢 @Licson,我已经尝试了你的代码,但是在IE8中,文本显示方式与其他浏览器不同。 - matthewb
我认为你应该尝试使用 jQuery 的 transform 插件。它是跨浏览器的,可以帮助你节省时间和代码。 - Licson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接