本篇文章给大家谈谈是否可以使用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 – 使用React获取图像的尺寸
- javascript – 您可以使用JQuery通过XSLT将XML转换为XML
- javascript – 是否可以使用html5自动全屏?
- javascript – 是否可以使用数据URI与Facebook共享图像?
是否可以使用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获取图像的尺寸
我尝试使用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
这是没有转换的代码示例
$.ajax({ type: "GET",url: "xml/charts.xml",dataType: "xml",success: function(xml) { $(xml).find('chart').each(function(){ // Create link here }); } });
解决方法
// 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 – 是否可以使用数据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!
有什么想法来完成分享?
解决方法
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共享图像?的相关知识,请在本站寻找。
本文标签: