GVKun编程网logo

是否可以使用JavaScript获取SVG图像的XML?(js获取svg文本内容)

7

本篇文章给大家谈谈是否可以使用JavaScript获取SVG图像的XML?,以及js获取svg文本内容的知识点,同时本文还将给你拓展javascript–使用React获取图像的尺寸、javascri

本篇文章给大家谈谈是否可以使用JavaScript获取SVG图像的XML?,以及js获取svg文本内容的知识点,同时本文还将给你拓展javascript – 使用React获取图像的尺寸、javascript – 您可以使用JQuery通过XSLT将XML转换为XML、javascript – 是否可以使用html5自动全屏?、javascript – 是否可以使用数据URI与Facebook共享图像?等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

是否可以使用JavaScript获取SVG图像的XML?(js获取svg文本内容)

是否可以使用JavaScript获取SVG图像的XML?(js获取svg文本内容)

我的目标是在JavaScript中加载SVG图像,并将其作为图像和底层SVG XML.

我可以加载像…

var myImage = new Image();
myImage.src = "cat.svg";

现在有了图像后,如何访问组成SVG图像的基础XML?

我提出的唯一解决方案是通过ajax再次加载它:

$(myImage).one("load", function(){
    $.ajax({
        url :       "cat.svg",
        cache :     true, 
        dataType :  "xml"
    }).fail(function( jqXHR, textStatus, errorThrown ) {
        console.error("Ajax failure loading image.");
    }).done(function( data, textStatus, jqXHR ){
        console.log("Got the image's SVG XML:", $(data).find('svg'));
    });
});

但我觉得可能有更好的方法来做到这一点.

解决方法:

无法从Image对象中提取图像源.

您的问题中包含的AJAX解决方案是获取源的唯一方法.

如果您只想加载一次图像,那么也许您可以先使用AJAX获取它,然后使用获取的XML渲染图像(例如,将文档添加为内联SVG,或将源设置为data: or Blob URL).

javascript – 使用React获取图像的尺寸

javascript – 使用React获取图像的尺寸

我需要用React获取图像的尺寸.我找到了一个名为 react-measure的库来计算React组件的测量值.它可以工作,但是当图像加载时我无法触发它.我需要在图像加载时触发它,这样我才能获得准确的尺寸,而不是0 x 157或类似的东西.

我尝试使用onLoad图像事件来检测图像何时加载,但我没有得到满意的结果.基本上我所做的是当图像加载(调用handleImageLoaded())时,将hasLoaded state属性更改为true.我知道hasLoaded已被改为true,因为它说的是:Image Loaded:true.

我注意到的是我只能计算已经缓存的图像的尺寸…

这是一个演示视频:cl.ly/250M2g3X1k21

是否有更好,更简洁的方法使用React正确检索尺寸?

这是代码:

import React,{Component} from 'react';
import Measure from '../src/react-measure';
class AtomicImage extends Component {

    constructor() {
        super();
        this.state = {
            hasLoaded: false,dimensions: {}
        };
        this.onMeasure = this.onMeasure.bind(this);
        this.handleImageLoaded = this.handleImageLoaded.bind(this);
    }

    onMeasure(dimensions) {
        this.setState({dimensions});
    }

    handleImageLoaded() {
        this.setState({hasLoaded: true});
    }

    render() {

        const {src} = this.props;
        const {hasLoaded,dimensions} = this.state;
        const {width,height} = dimensions;

        return(
            <div>
                <p>Dimensions: {width} x {height}</p>
                <p>Image Loaded: {hasLoaded ? 'true' : 'false'}</p>
                <Measure onMeasure={this.onMeasure} shouldMeasure={hasLoaded === true}>
                    <div style={{display: 'inline-block'}}>
                        <img src={src} onLoad={this.handleImageLoaded}/>
                    </div>
                </Measure>
            </div>
        );
    }
}

export default AtomicImage;

这是父代码.它并不重要 – 只需将src传递给AtomicImage元素:

import React,{Component} from 'react';
import ReactDOM from 'react-dom';
import AtomicImage from './AtomicImage';

class App extends Component {

  constructor() {
    super();
    this.state = {src: ''}
    this.handleOnChange = this.handleOnChange.bind(this);
  }

  handleOnChange(e) {
    this.setState({src: e.target.value});
  }

  render() {

    const {src} = this.state;
    return (
      <div>
        <div>
          <input onChange={this.handleOnChange} type="text"/>
        </div>
        <AtomicImage src={src} />
      </div>
    )
  }

}

ReactDOM.render(<App />,document.getElementById('app'));

解决方法

检索尺寸的方法

你可以通过js实现你的目标:通过offsetHeight,offsetWidth.
为了获得img的尺寸,img必须是可见的.你无法从缓存的img中获取维度.

例如:http://jsbin.com/hamene/4/edit?js,output

class AtomicImage  extends Component {
   constructor(props) {
        super(props);
        this.state = {dimensions: {}};
        this.onImgLoad = this.onImgLoad.bind(this);
    }
    onImgLoad({target:img}) {
        this.setState({dimensions:{height:img.offsetHeight,width:img.offsetWidth}});
    }
    render(){
        const {src} = this.props;
        const {width,height} = this.state.dimensions;

        return (<div>
                dimensions width{width},height{height}
                <img onLoad={this.onImgLoad} src={src}/>
                </div>
               );
    }
}

javascript – 您可以使用JQuery通过XSLT将XML转换为XML

javascript – 您可以使用JQuery通过XSLT将XML转换为XML

我有一个网站,其中包含基于文档类型动态填充的文档的链接,所有数据都位于一个中央xml文件中.我想让 JQuery将参数传递给样式表,样式表根据传递的参数使用xpath隔离节点,然后根据属性对注释进行排序.从我发现的所有文档中,JQuery本身不支持XSLT,并且一旦原始xml被转换,没有任何第三方插件可以返回新的XML对象.我错过了什么或是我想要的不可能吗? xsl文件已经在javascript之外进行了测试,它运行完美.

这是没有转换的代码示例

$.ajax({
            type: "GET",url: "xml/charts.xml",dataType: "xml",success: function(xml) {        

        $(xml).find('chart').each(function(){
            // Create link here
        });

    }
});

解决方法

另一个是 http://jquery.glyphix.com/jquery.xslTransform/example/index.html上的jquery.xslTransform
// Now load both files into variables for the next 2 transformations
var xsldoc = $.xsl.load('test.xsl');
var xmldoc = $.xsl.load('test.xml');

// with an xpath
$('#with').getTransform(
    xsldoc,xmldoc,{
        xpath: '/test/inside'
    }
);

或者作为一般文件说明:

$.getTransform(
'path-to-xsl.xsl',// path or xsl document in javascript variable
'path-to-xml.xml',// path or xml document in javascript variable
{
  params: {                     // object for your own xsl parameters
    paramName1: 'paramValue1',paramName2: 'paramValue2'
  },xpath: '/test/inside',// trims your xml file to that defined by this xpath
  eval: true,// evaluates any <script> blocks it finds in the transformed result
  callback: function(){}        // getTransform evaluates this function when transformation is complete
});

// loads an xml file,parses it and stores it in xmlDoc
var xmlDoc = xslTransform.load('path-to-xml.xml');

在链接页面上有一个使用示例,猜测它可以满足您的需求,虽然它是sarissa的javascript包装器,它试图在所有浏览器中为XSL工具制作独立于浏览器的API.

javascript – 是否可以使用html5自动全屏?

javascript – 是否可以使用html5自动全屏?

我基于在Web浏览器中使用Fullscreen API(http://hacks.mozilla.org/2012/01/using-the-fullscreen-api-in-web-browsers)进行全屏,但仅适用于单击事件或控制台firebug,而不是提交事件或鼠标悬停或类似的自动化.是否可以使用 html5自动全屏,无需点击事件或类似事件?

编辑:如果不可能,我理解安全性和可访问性的原因,但在某些环境中,这可能是有希望的.

解决方法

不,这是不可能的 – 出于安全原因,访问全屏需要用户的“许可”,因此与浏览器输入事件有关.

javascript – 是否可以使用数据URI与Facebook共享图像?

javascript – 是否可以使用数据URI与Facebook共享图像?

我有几个画布相互定位,合并为一个作为数据URI.一切正常,我可以将合成图像显示在页面上,但我需要的另一个功能是创建URI然后共享到Facebook.我想尝试这样做而不发送到服务器并在客户端进行.

代码不是问题所必需的,但如果你想看到它

<ul>
                        <li><span id='merge-canvas'>Save Image</span></li>
                        <li><span id='share-facebook'>Share</span></li>
</ul>

用javascript看起来像这样.

// DROPBox AND FILE READER

function noopHandler(evt) {
        evt.stopPropagation();
        evt.preventDefault();
    }

    function drop(evt) {
        evt.stopPropagation();
        evt.preventDefault();

    var files = evt.dataTransfer.files;
    var count = files.length;

    // Only call the handler if 1 or more files was dropped.
    if (count > 0) {

    }
        handleFiles(files);

}

function handleFiles(files) {
    var file = files[0];

    document.getElementById("droplabel").innerHTML = "Processing " + file.name;

    var reader = new FileReader();

    // init the reader event handlers
    reader.onloadend = handleReaderLoadEnd;

    // begin the read operation
    reader.readAsDataURL(file);
}

function handleReaderLoadEnd(evt) {

    // basically clears and redraws the face canvas on load of the users image
    document.getElementById("droplabel").innerHTML = "Picture Added Successfully!";
    var $canvas = $('canvas');
    ctx = $canvas[0].getContext('2d');
    face = new Image();
    face.onload = function() {
        ctx.drawImage(face,500,(face.height/face.width) * 500);
        }

    face.src = evt.target.result;
    return face;
}

function initializeDropBox() {
    var dropBox = document.getElementById("dropBox")

    // adds different events for the dropBox and points to the relevant function

    dropBox.addEventListener("dragenter",noopHandler,false);
    dropBox.addEventListener("dragexit",false);
    dropBox.addEventListener("dragover",false);
    dropBox.addEventListener("drop",drop,false);
}

它产生了一个非常长的数据URI!
有什么想法来完成分享?

解决方法

您可以通过URL或multipart / form-data在source参数中发布图像:

https://developers.facebook.com/docs/graph-api/reference/v2.1/user/photos

/* make the API call */
FB.api(
    "/me/photos","POST",{
        "source": "{image-data}"
    },function (response) {
      if (response && !response.error) {
        /* handle the result */
      }
    }
);

关于是否可以使用JavaScript获取SVG图像的XML?js获取svg文本内容的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于javascript – 使用React获取图像的尺寸、javascript – 您可以使用JQuery通过XSLT将XML转换为XML、javascript – 是否可以使用html5自动全屏?、javascript – 是否可以使用数据URI与Facebook共享图像?的相关知识,请在本站寻找。

本文标签: