Javascript-使用jquery(和|或)与Canvas比较两个HTML元素视图
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Javascript-使用jquery(和|或)与Canvas比较两个HTML元素视图,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3685字,纯文字阅读大概需要6分钟。
内容图文
![Javascript-使用jquery(和|或)与Canvas比较两个HTML元素视图](/upload/InfoBanner/zyjiaocheng/677/f8789f9611d44c41a1aac351781e0e37.jpg)
我有文本DIV,如下所示.我仅针对非IE和Webkit浏览器.
一:
<div id="target1"> Some<sup>en</sup> <i><b>text</b></i> </div>
上面的行看起来像:带样式的Someen文本
第二:
<div id="target2"> Some<sup>en</sup> <span class='boldIt'>text</span></div>
.boldIt{
font-weight : bold;
font-style : italic;
}
看起来和上面一样.根据观点,两者是相同的.
但下方与上方不同
<div id="target3"> Someen text</div>
我的要求是比较三个目标要素.
我试过的
我尝试遍历DIV的每个子节点并使用getComputedStyle()匹配样式.但是我可以看到页面上发生了很大的性能问题.因为涉及到很多案例.
有一个主意,但无助,这是一个想法
在画布上绘制两个元素,然后像比较两个图像一样比较两个画布.这真的有可能吗?如果有可能,当我将一个内联元素与块级元素进行比较时,是否会改变比较的行为?
请给我建议.如果没有想法,我会坚持使用HTML,就像我之前提到的那样.
我已经尝试使用画布this,但我的目标仅是Chrome.安东尼的答案完全符合我的要求.但是在下面的情况下,我找不到办法
for(var i = 0; i < arr.length; i++){
var htStr = arr[i].one, htStr2 = arr[i].two;
// How can I match these two now...
}
解决方法:
您使用< canvas>的想法是可能的.
请参阅DEMO(已在Chrome,Safari和Opera上测试).
您可以使用html2canvas将以下内容转换为3个不同的画布,并比较它们的base64字符串以确定它们在视觉上是否相同.您应该将它们包装在单独的容器中,以便所有文本都在画布中呈现.
<div id="target1-container">
<div id="target1"> Some<sup>en</sup> <i><b>text</b></i> </div>
</div>
<div id="target2-container">
<div id="target2"> Some<sup>en</sup> <span class='boldIt'>text</span></div>
</div>
<div id="target3-container">
<div id="target3"> Someen text</div>
</div>
使用async.js处理多个异步调用,转换为canvas和base64字符串:
async.parallel({
target1: function (callback) {
html2canvas(document.getElementById("target1-container"), {
onrendered: function (canvas) {
callback(null, canvas.toDataURL());
}
});
},
target2: function (callback) {
html2canvas(document.getElementById("target2-container"), {
onrendered: function (canvas) {
callback(null, canvas.toDataURL());
}
});
},
target3: function (callback) {
html2canvas(document.getElementById("target3-container"), {
onrendered: function (canvas) {
callback(null, canvas.toDataURL());
}
});
}
},
function (err, results) {
console.log(results);
});
关于您更新的问题,以下是一个比较字符串定义的元素的外观的函数:
function compare(arr, fn) {
// create test div
var testdiv = document.createElement("div");
testdiv.style.marginTop = '1000px';
document.body.appendChild(testdiv);
async.map(
arr,
function (data, callback) {
var htStr = data.one,
htStr2 = data.two;
// create elements from strings
var el = document.createElement("div"),
el2 = document.createElement("div");
el.innerHTML = htStr;
testdiv.appendChild(el);
el2.innerHTML = htStr2;
testdiv.appendChild(el2);
// convert to canvas and base64 strings
async.parallel([
function (callback) {
html2canvas(el, {
onrendered: function (canvas) {
callback(null, canvas.toDataURL());
}
});
},
function (callback) {
html2canvas(el2, {
onrendered: function (canvas) {
callback(null, canvas.toDataURL());
}
});
}
],
// start comparison
function (err, results) {
if (results[0] === results[1]) {
callback(null, true);
} else {
callback(null, false);
}
});
},
// callback function
function (err, results) {
document.body.removeChild(testdiv);
if (typeof fn === 'function') {
fn(results);
}
}
);
}
// elements to be tested
var arr = [];
arr.push({
one: '<div id="target1"> Some<sup>en</sup> <i><b>text</b></i> </div>',
two: '<div id="target2"> Some<sup>en</sup> <span class="boldIt">text</span></div>'
});
arr.push({
one: '<div id="target1"> Some<sup>en</sup> <i><b>text</b></i> </div>',
two: '<div id="target3"> Someen text</div>'
});
// let the test begin
compare(arr, function (result) {
console.log(result);
});
它在回调函数中返回一个数组,
> true,表示元素在视觉上是相同的,并且
>错误,表示它们不同.
请参阅this DEMO中的控制台.
内容总结
以上是互联网集市为您收集整理的Javascript-使用jquery(和|或)与Canvas比较两个HTML元素视图全部内容,希望文章能够帮你解决Javascript-使用jquery(和|或)与Canvas比较两个HTML元素视图所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。