【问题标题】:add VML elements (images) with javascript使用 javascript 添加 VML 元素(图像)
【发布时间】:2010-07-21 07:24:40
【问题描述】:

您好,我一直在尝试使用 javascript 添加 VML 图像元素。 现在这是我用来生成这些图像的内容:

function add_tools()
{       
var elemm = document.createElement('rvml:image'); 
elemm.setAttribute('src', 'pic.png');
elemm.setAttribute('id', 'gogo');
elemm.setAttribute('class', 'rvml');
document.body.appendChild(elemm);   

document.getElementById('gogo').style.position='absolute';
document.getElementById('gogo').style.width=55;
document.getElementById('gogo').style.height=55;
document.getElementById('gogo').style.top=200;
document.getElementById('gogo').style.left=300;
document.getElementById('gogo').style.rotation=200;
document.getElementById('gogo').style.display = "block"; 
}

通常当我生成 vml 图像元素时,HTML 代码应该类似于:

<rvml:image style="POSITION:absolute; WIDTH:55px; HEIGHT:55px; TOP:0px; LEFT:0px; rotation:0;" src="pic.png" id=gogo class=rvml>

现在上面的 javascript 函数适用于 HTML 元素。 但是当我用它来生成 VML 元素时。生成的元素不会显示在浏览器中。但是当我检查 document.body.innerHTML 时。我可以看到该元素已实际创建。但它没有显示..

有什么想法吗? 有什么方法可以用来用javascript刷新或重绘元素。或任何我可以用来解决此问题的方法。

谢谢

【问题讨论】:

    标签: javascript image element hidden vml


    【解决方案1】:

    我为此苦苦挣扎,最后我改用了填充:

    <div style="position:relative">
      <vml:rect stroked="f" style="position:absolute"> 
        <vml:fill type="tile" aspect="ignore" src="pathto.png" style="position:absolute">  
        </vml:fill>
      <vml:rect> 
    </div>
    

    似乎需要绝对位置,因此需要包含 div 的相对位置。

    有关更多信息,请查看用于 jQuery 的 superpng 插件,它使用此技术进行 png alpha 替换。

    【讨论】:

    • 谢谢。 fill 确实比 image 好用;至少形状会对转换做出反应(图像本身不会,因为你需要 SVG)。
    【解决方案2】:

    呃。像往常一样自己修好了……

    function add_tools()
    {   
    var elemm = document.createElement('rvml:image'); 
    elemm.src = 'pic.png';
    elemm.className = 'rvml';
    document.body.appendChild(elemm);
    elemm.id = "gogo";
    elemm.style.position='absolute';
    elemm.style.width=55;
    elemm.style.height=55;
    elemm.style.top=200;
    elemm.style.left=300;
    elemm.style.rotation=200; 
    }
    

    似乎 setAttribute 函数没有改变元素的状态。 但我仍然遇到事件问题。现在如果我想使用:

    elemm.onload = "alert('coco')";
    

    这应该在我运行将绘制元素的 javascript 函数时触发。 但我没有让那个警报框工作。嗯,有点奇怪。我检查了innerHTML,我可以在那里看到它。

    【讨论】:

    • 为了将来的参考,有一个名为 dd_roundies 的库,它使用 javascript 创建 VML 元素以创建圆角。我认为 Drew Diller 执行此操作的方式非常好,只是您无法撤消或删除它创建的 VML。 dillerdesign.com/experiment/DD_roundies
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多