Jquery mobile 画布未定义
我正在试验Raymond Camden的水印代码,以及Phonegap camera API中的示例 这架照相机很好用 但是,Jquery mobile 画布未定义,jquery-mobile,canvas,cordova,Jquery Mobile,Canvas,Cordova,我正在试验Raymond Camden的水印代码,以及Phonegap camera API中的示例 这架照相机很好用 但是, Uncaught ReferenceError: canvas is not defined 显示在LogCat中 我试着把变量放在函数和全局中。但是错误仍然出现。我的代码如下: <!DOCTYPE html> <head> <script type="text/javascript" charset="utf-8" src="cordo
Uncaught ReferenceError: canvas is not defined
显示在LogCat中
我试着把变量放在函数和全局中。但是错误仍然出现。我的代码如下:
<!DOCTYPE html>
<head>
<script type="text/javascript" charset="utf-8" src="cordova-2.7.0.js"></script>
<link rel="stylesheet" type="text/css" href="jquery/css/jquery.mobile-1.3.1.min.css"/>
<script type="text/javascript" charset="utf-8" src="jquery/jquery-1.9.1.min.js"></script>
<script type="text/javascript" charset="utf-8" src="jquery/jquery.mobile-1.3.1.min.js"><script>
<script type="text/javascript" charset="utf-8">
var watermark;
var canvasDOM;
var canvas;
document.addEventListener("deviceready",onDeviceReady,false);
function onDeviceReady() {
} </script>
<script type="text/javascript" charset="utf-8">
canvasDOM = $("myCanvas")[0];
canvas = canvasDOM.getContext("2d");
watermark = new Image();
watermark.src = "q1.jpg";
function cybershot() {
navigator.camera.getPicture(camSuccess, camError, {quality: 75, targetWidth: 400, targetHeight: 400, destinationType: Camera.DestinationType.FILE_URI});
}
function camError(e) {
console.log("Camera Error");
console.log(JSON.stringify(e));
}
function camSuccess(picuri) {
console.log("Camera Success");
var img = new Image();
img.src=picuri;
img.onload = function(e) {
canvas.drawImage(img, 0, 0);
canvas.drawImage(watermark, canvasDOM.width-watermark.width, canvasDOM.height - watermark.height);
}
}
</script>
<style>
#myCanvas {
width: 400px;
height: 400px;
}
</style>
</head>
<body>
<h1>Watermark Camera</h1>
<button onclick="cybershot();">Capture Photo</button> <br>
<p/>
<canvas id="myCanvas"></canvas>
</body>
</html>
var水印;
拉票;
var帆布;
文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
函数ondevicerady(){
}
canvasDOM=$(“myCanvas”)[0];
canvas=canvasDOM.getContext(“2d”);
水印=新图像();
watermark.src=“q1.jpg”;
函数cybershot(){
navigator.camera.getPicture(camsucture,camerrror,{quality:75,targetWidth:400,targetLight:400,destinationType:camera.destinationType.FILE_URI});
}
函数卡梅罗(e){
控制台日志(“摄像头错误”);
log(JSON.stringify(e));
}
函数camsucces(picuri){
控制台日志(“摄像头成功”);
var img=新图像();
src=picuri;
img.onload=函数(e){
canvas.drawImage(img,0,0);
canvas.drawImage(水印,canvasDOM.width-watermark.width,canvasDOM.height-watermark.height);
}
}
#我的画布{
宽度:400px;
高度:400px;
}
水印照相机
拍摄照片
尝试移动此部分(脚本块的全部内容)canvasDOM=$(“myCanvas”)[0]
转换为$(文档).ready(函数(){})
尝试移动此部分(脚本块的全部内容)canvasDOM=$(“myCanvas”)[0]
转换为$(文档).ready(函数(){})代码>解决方案
此代码中有一个错误
使用的Javascript必须放在onDeviceReady()函数中。它相当于经典的jQuery
document ready
在这种情况下,javascript在头中执行,然后正文
内容加载到DOM
中ondevicerady()
将延迟其执行,直到所有内容都加载到DOM
中
固定代码
您的javascript应该如下所示:
var canvas;
var watermark;
document.addEventListener("deviceready",onDeviceReady,false);
function onDeviceReady() {
canvasDOM = $("myCanvas")[0];
canvas = canvasDOM.getContext("2d");
watermark = new Image();
watermark.src = "q1.jpg";
}
function cybershot() {
navigator.camera.getPicture(camSuccess, camError, {quality: 75, targetWidth: 400, targetHeight: 400, destinationType: Camera.DestinationType.FILE_URI});
}
function camError(e) {
console.log("Camera Error");
console.log(JSON.stringify(e));
}
function camSuccess(picuri) {
console.log("Camera Success");
var img = new Image();
img.src=picuri;
img.onload = function(e) {
canvas.drawImage(img, 0, 0);
canvas.drawImage(watermark, canvasDOM.width-watermark.width, canvasDOM.height - watermark.height);
}
}
解决方案
此代码中有一个错误
使用的Javascript必须放在onDeviceReady()函数中。它相当于经典的jQuery
document ready
在这种情况下,javascript在头中执行,然后正文
内容加载到DOM
中ondevicerady()
将延迟其执行,直到所有内容都加载到DOM
中
固定代码
您的javascript应该如下所示:
var canvas;
var watermark;
document.addEventListener("deviceready",onDeviceReady,false);
function onDeviceReady() {
canvasDOM = $("myCanvas")[0];
canvas = canvasDOM.getContext("2d");
watermark = new Image();
watermark.src = "q1.jpg";
}
function cybershot() {
navigator.camera.getPicture(camSuccess, camError, {quality: 75, targetWidth: 400, targetHeight: 400, destinationType: Camera.DestinationType.FILE_URI});
}
function camError(e) {
console.log("Camera Error");
console.log(JSON.stringify(e));
}
function camSuccess(picuri) {
console.log("Camera Success");
var img = new Image();
img.src=picuri;
img.onload = function(e) {
canvas.drawImage(img, 0, 0);
canvas.drawImage(watermark, canvasDOM.width-watermark.width, canvasDOM.height - watermark.height);
}
}
我已经尝试过你的解决方案,我能够缩小误差。现在,我检测到无法调用getContext。我想知道有什么可能的建议吗@GajotresI解决了这个问题,现在工作得很好。非常感谢您的评论和建议。我已经尝试了您的解决方案,我能够缩小错误。现在,我检测到无法调用getContext。我想知道有什么可能的建议吗@GajotresI解决了这个问题,现在工作得很好。非常感谢您的意见和建议。我解决了这个问题,现在工作得很好。非常感谢您的意见和建议。我解决了这个问题,现在工作得很好。非常感谢您的评论和建议。