当前位置: 首页 > 面试题库 >

如何在HTML5(或Fabric.js)中制作Rooftext效果和Valley文字效果

皮景龙
2023-03-14
问题内容

我正在使用以下代码:

<script type='text/javascript'>//<![CDATA[ 
window.onload=function(){
/// (c) Ken Fyrstenberg Nilsen, Abidas Software .com
/// License: CC-Attribute

var ctx = demo.getContext('2d'),
    font = '64px impact',
    w = demo.width,
    h = demo.height,
    curve,
    offsetY,
    bottom,
    textHeight,
    angleSteps = 255/h,
    i = h,
    y,
    os = document.createElement('canvas'),
    octx = os.getContext('2d');

os.width = w;
os.height = h;
octx.font = font;
octx.textBaseline = 'top';
octx.textAlign = 'center';

function renderBridgeText() {
    curve = parseInt(iCurve.value, 10);
    offsetY = parseInt(iOffset.value, 10);
    textHeight = parseInt(iHeight.value, 10);
    bottom = parseInt(iBottom.value, 10);

    vCurve.innerHTML = curve;
    vOffset.innerHTML = offsetY;
    vHeight.innerHTML = textHeight;
    vBottom.innerHTML = bottom;

    octx.clearRect(0, 0, w, h);
    ctx.clearRect(0, 0, w, h);

    octx.fillText(iText.value, w * 0.5, 0);

    /// slide and dice
    i = w;
    while (i--) {
        y = bottom + curve * Math.sin(i / angleSteps * Math.PI /160);
        ctx.drawImage(os, i, offsetY, 1, textHeight,i,offsetY, 1, y);
    }
}
iCurve.onchange = iOffset.onchange = iHeight.onchange = iBottom.onchange = iText.onkeyup = renderBridgeText;
renderBridgeText()
}//]]>  
</script>
</head>
<body>
  <canvas id=demo width=600 height=300></canvas>
<br>
    <span>Curve:</span>
<input id="iCurve" type="range" min=0 max=200 value=110>
<span id="vCurve">110</span>
    <br><span>OffsetY:</span>
<input id="iOffset" type="range" min=0 max=100 value=4>
<span id="vOffset">0</span>
    <br><span>Text height:</span>
<input id="iHeight" type="range" min=0 max=200 value=64>
<span id="vHeight">64</span>
    <br><span>Bottom:</span>
<input id="iBottom" type="range" min=0 max=200 value=200>
<span id="vBottom">200</span>
<br><span>Text:</span>
<input id="iText" type="text" value="BRIDGE TEXT">
</body>

我需要像下面的图片一样的文字效果,我已经做了很多尝试,但是我
做不到。

有人可以帮我吗?

我们还可以将fabric.js中的活动对象与上下文一起使用吗?


问题答案:

这是原始代码的修改版本(与我的原始代码相比,所提供的代码已更改了值..-)),可以通过使用参数来产生所有这些形状:
初始化:

var ctx = demo.getContext('2d'), /// context
    font = '64px impact',        /// font
    w = demo.width,              /// cache canvas width and height
    h = demo.height,
    curve,                       /// radius
    offsetY,                     /// offset for text
    bottom,                      /// bottom of text
    textHeight,                  /// text height (region of text)
    isTri = false,               /// is triangle shaped (roof)
    dltY,                        /// delta for triangle
    angleSteps = 180 / w,        /// angle steps for curved text
    i = w,                       /// "x" backwards
    y,                           /// top of text

    /// offscreen canvas that holds original text
    os = document.createElement('canvas'),
    octx = os.getContext('2d');

os.width = w;
os.height = h;

/// set font on off-screen canvas where we draw it
octx.font = font;
octx.textBaseline = 'top';
octx.textAlign = 'center';

主要功能:

/// render
function renderBridgeText() {

    /// demo stuff snipped (see link)

    /// clear canvases    
    octx.clearRect(0, 0, w, h);
    ctx.clearRect(0, 0, w, h);

    /// draw text (text may change)
    octx.fillText(iText.value.toUpperCase(), w * 0.5, 0);

    /// slide and dice
    dltY = curve / textHeight;  /// calculate delta for roof/triangle
    y = 0;                      /// reset y in case we do roof
    i = w;                      /// init "x"

    while (i--) {

        if (isTri) {
            /// bounce delta value mid-way for triangle
            y += dltY;
            if (i === (w * 0.5)|0) dltY = -dltY;

        } else {
            /// calc length based on radius+angle for curve
            y = bottom - curve * Math.sin(i * angleSteps * Math.PI / 180);
        }

        /// draw a slice
        ctx.drawImage(os, i, 0, 1, textHeight,
                          i, h * 0.5 - offsetY / textHeight * y, 1, y);
    }
}


 类似资料:
  • 本文向大家介绍JavaScript+html5 canvas制作的圆中圆效果实例,包括了JavaScript+html5 canvas制作的圆中圆效果实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript+html5 canvas制作的圆中圆效果。分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: 更多关于js特效相关内容感兴趣的读者可查看本站专题:《j

  • 本文向大家介绍JavaScript html5 canvas绘制时钟效果,包括了JavaScript html5 canvas绘制时钟效果的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript+html5 canvas绘制时钟效果。分享给大家供大家参考,具体如下:  HTML部分: JavaScript部分: 希望本文所述对大家JavaScript程序设计有所帮助。

  • 本文向大家介绍JavaScript和jQuery制作光棒效果,包括了JavaScript和jQuery制作光棒效果的使用技巧和注意事项,需要的朋友参考一下 使用javaScript与jQuery添加CSS样式的区别和步骤 使用javaScript制作光棒效果 --首先是javaScript 两种方式相比相对来说:.cssText比较简便 使用jQuery制作光棒效果 相对于javaScript 

  • 可以对文字执行各种操作以更改其外观 例如,可以使文字变形、将文字转换为形状或向文字添加投影。创建文字效果的最简单的方法之一是在文字图层上播放 Photoshop 附带的默认的“文本效果”动作。可以通过从“动作”面板菜单选取“文本效果”访问这些效果。 沿路径或在路径内创建文字 您可以输入沿着用钢笔或形状工具创建的工作路径的边缘排列的文字。当您沿着路径输入文字时,文字将沿着锚点被添加到路径的方向排列。

  • 本文向大家介绍JavaScript html5 canvas绘制时钟效果(二),包括了JavaScript html5 canvas绘制时钟效果(二)的使用技巧和注意事项,需要的朋友参考一下  对于H5来说,canvas可以说是它最有特色的一个地方了,有了它之后我们可以随意的在网页上画各种各样的图形,做一些小游戏啊什么的。canvas这个标签的用法,在网上也有特别多的教程了,这里就不作介绍了。今天

  • 本文向大家介绍JavaScript+html5 canvas绘制的小人效果,包括了JavaScript+html5 canvas绘制的小人效果的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript+html5 canvas绘制的小人效果。分享给大家供大家参考,具体如下: 运行效果截图如下: index.html代码如下: canvas.js代码如下: 更多关于js特效相关内容