I am trying to create a javascript slideshow, here is my current code:
window.onload = function() {
var c = document.getElementById("frame");
var ctx = c.getContext("2d");
var img = document.getElementById("s1");
ctx.drawImage(img, 0, 0, 300, 190);
}
function scene2() {
var img1 = document.getElementById("s2");
ctx.drawImage(img1, 0, 0, 300, 190);
};
.i {
display: none;
}
canvas {
border: 5px solid #000000;
width: 910;
height: 500;
}
<img class="i" id="s1" src="Images/scene1.png"></img>
<img class="i" id="s2" src="Images/scene2.png"></img>
<canvas id="frame"></canvas>
<button onclick="scene2()">A</button>
But, when I press the a button to go to the next slide, it stays on the first slide. How can I fix this? Thanks in advance.
function scene2 creates new scope for variables and ctx variable is not visible there. Look at this code:
<html>
<img class="i" id="s1" src="http://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-icon#2.png?v=73d79a89bded&a"></img>
<img class="i" id="s2" src="http://hammerjs.github.io/assets/img/stackoverflow-icon.svg"></img>
<canvas id="frame"></canvas>
<button onclick="scene2()">A</button>
<script>
window.onload = function() {
var c=document.getElementById("frame");
var ctx=c.getContext("2d");
var img=document.getElementById("s1");
ctx.drawImage(img,0,0,300,190);
}
function scene2(){
var c=document.getElementById("frame");
var ctx=c.getContext("2d");
var img1=document.getElementById("s2");
ctx.drawImage(img1,0,0,300,190);
};
</script>
<style>
.i{
display: none;
}
canvas{
border: 5px solid #000000;
width:910;
height:500;
}
</style>
</html>
Related
I have 2 canvases side by side , and in the first one I have resizable draggable div as a crop region and I want to display the cropped region on the second canvas . But it is not happening in my case. Any help is appreciated
function crop(){
var x = $("#crop_square").width();
var y = $("#crop_square").height();
var ty = $("#crop_square").offset().top -
$("#area_c").offset().top;
var tx = $("#crop_square").offset().left -
$("#area_c").offset().left;
alert(x);
alert(y);
alert(ty);
alert(tx);
var c = document.getElementById("area_c"); //canvaas1
var c2 = document.getElementById("area_c2"); // canvas2
var ctx2 = c2.getContext("2d");
ctx2.drawImage(c,tx,ty,x,y,0,0,x,y );
}
If you need to "crop" a canvas with a div you may use the div's BoundingClientRect data to draw the image on the other canvas:
I hope this is what you were asking.
let cw = (area_c.width = area_c2.width = 400);
let ch = (area_c.height = area_c2.height = 400);
const ctx1 = area_c.getContext("2d");
const ctx2 = area_c2.getContext("2d");
theImg.onload = function() {
ctx1.drawImage(theImg, 0, 0);
let bcr = crop_square.getBoundingClientRect();
ctx2.drawImage(
theImg,
bcr.x,
bcr.y,
bcr.width,
bcr.height,
bcr.x,
bcr.y,
bcr.width,
bcr.height
);
}
.wrap {
width: 300px;
height: 300px;
border: 1px solid;
display: inline-block;
position: relative;
}
#crop_square {
position: absolute;
width: 150px;
height: 75px;
left: 100px;
top: 53px;
border: 5px solid gold;
}
<div class="wrap">
<canvas id="area_c">
<img id="theImg" src="data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAZAAD/4QMBaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjM0ODBGMTdBQjMwQTExRTdBMTMzQ0JDMjUzRkE2MDhFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjM0ODBGMTc5QjMwQTExRTdBMTMzQ0JDMjUzRkE2MDhFIiB4bXA6Q3JlYXRvclRvb2w9IjguMSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSI3RURCQTlGMDRBOThGQjcwM0QzQzk4MzYwQjAyNDM1QSIgc3RSZWY6ZG9jdW1lbnRJRD0iN0VEQkE5RjA0QTk4RkI3MDNEM0M5ODM2MEIwMjQzNUEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7QBIUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAA8cAVoAAxslRxwCAAACAAIAOEJJTQQlAAAAAAAQ/OEfici3yXgvNGI0B1h36//uAA5BZG9i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"/>
</canvas>
<div id="crop_square"></div>
</div>
<div class="wrap">
<canvas id="area_c2"></canvas>
</div>
How can I change the thickness of the pen on canvas with JQuery?
I have used a canvas and I want to put the range below the canvas and it should be hidden when the page is loaded and after clicking on a button it should be appeared.
body {
background: #384047;
font-family: sans-serif;
}
canvas {
background: #fff;
display: block;
margin: 50px auto 10px;
border-radius: 5px;
box-shadow: 0 4px 0 0 #222;
cursor: url(http://s8.picofile.com/file/8333405442/download.png), pointer;
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="001.css">
</head>
<body>
<canvas width="600" height="400" ></canvas>
</body>
</html>
Here's an example, I'll quickly explain:
You cannot change the width and height of the cursor property in CSS, only the x and y coordinates - read the MDN Reference. So to render a custom cursor, simply make a new Image object, set cursor: none; and render the custom cursor on the canvas like you would any other canvas element. The slider value scales the width and height of the cursor. If you have any questions, feel free to ask.
var canvas = document.getElementById("c"); //define DOM content
var ctx = canvas.getContext("2d");
var slider = document.getElementById("range");
var btn = document.getElementById("btn");
var clicked = false;
var cursor = new Image(); //load img
cursor.src = "cursor.png"; //change this to your img
cursor.w = cursor.h = 50;
btn.addEventListener("click", e => { //When btn is clicked
slider.style.display = "block"; //display range
});
c.addEventListener("mousemove", e => {
ctx.clearRect(0,0,canvas.width,canvas.height);
ctx.drawImage(cursor, e.pageX - cursor.w/2, e.pageY - cursor.h/2, cursor.w, cursor.h);
});
slider.addEventListener("click", e => {
check();
});
function check() {
if (slider.value !== cursor.w) { //if unique value
cursor.w = cursor.h = slider.value; //width and height scale based on slider
}
}
canvas {
cursor: none;
}
#range {
display: none;
}
<canvas id="c" width="600" height="400" ></canvas>
<input id="btn" type="button" value="activate" />
<input id="range" type="range" />
So when I try to draw image on canvas like this (it works fine):
<html>
<head>
<title>HTML5 canvas</title>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
$(document).ready(start);
var image1;
function start() {
var ctx = $('#canvas').get(0).getContext('2d');
image1 = new Image;
image1.src = "/arenag/arenagimg/BeastBear.jpg";
image1.onload = function () {
ctx.drawImage(image1.src,200, 200, 100, 100);
};
}
</script>
<style type="text/css">
#framework {
border: 2px solid #000;
width: 100%;
text-align: center;
}
#canvas {
background-color: #00FFE2;
margin-right: auto;
margin-left: auto;
}
</style>
</head>
<body>
<div id="framework">
<canvas id="canvas" width="1024" height="768"></canvas>
</div>
</body>
</html>
Then i add a folder called imagefactory.js and create a class ImageFactory,and create function in that class called drawImage:
var ImageFactory = function (ctx) {
this.ctx = ctx;
this.drawImage = function (image_arg, image_x, image_y, image_w, image_h) {
var _this = this;
var image = new Image;
image.src = image_arg;
image.onload = function () {
_this.ctx.drawImage(image.src, image_x, image_y, image_w, image_h);
};
};
};
Then I simply try to call that function in my main file:
<html>
<head>
<title>HTML5 canvas</title>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
$(document).ready(start);
var image;
function start() {
image = '/arenag/arenagimg/BeastBear.jpg';
var ctx = $('#canvas').get(0).getContext('2d');
var imageFactory=new ImageFactory(ctx);
imageFactory.drawImage(image,200, 200, 100, 100);
}
</script>
<style type="text/css">
#framework {
border: 2px solid #000;
width: 100%;
text-align: center;
}
#canvas {
background-color: #00FFE2;
margin-right: auto;
margin-left: auto;
}
</style>
</head>
<body>
<div id="framework">
<canvas id="canvas" width="1024" height="768"></canvas>
</div>
</body>
</html>
I get this error(on 36 line in my main (HTML) file where the canvas is) :
Uncaught TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap)'
And also this bug which is connected to the other one(i mean when there is no this bug then there is no the first bug too):
[object%20HTMLImageElement]:1 GET http://phpcasovi.dev/arenag/klase/[object%20HTMLImageElement] 404 (Not Found)
And i wanted to just give you a help to solve this : When i change var image = new Image;to var image = {};in JS file.Then there is no bug but becuase var image is not equal to new Image well then there is no images at all.So i think bug is at that line where i say var image = new Image; but i dont know why there is a bug (why should it be)??
First argument for context.drawImage should be Image-Object not image.src
From docs, ctx.drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);, image, An element to draw into the context. The specification permits any canvas image source (CanvasImageSource), such as an HTMLImageElement, an HTMLVideoElement, an HTMLCanvasElement or an ImageBitmap.
var ImageFactory = function(ctx) {
this.ctx = ctx;
this.drawImage = function(image_arg, image_x, image_y, image_w, image_h) {
var _this = this;
var image = new Image();
image.src = image_arg;
image.onload = function() {
_this.ctx.drawImage(image, image_x, image_y, image_w, image_h);
};
};
};
$(document).ready(start);
function start() {
var image = 'https://www.google.com/images/branding/googlelogo/1x/googlelogo_white_background_color_272x92dp.png';
var ctx = $('#canvas').get(0).getContext('2d');
var imageFactory = new ImageFactory(ctx);
imageFactory.drawImage(image, 200, 200, 100, 100);
}
#framework {
border: 2px solid #000;
width: 100%;
text-align: center;
}
#canvas {
background-color: #00FFE2;
margin-right: auto;
margin-left: auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div id="framework">
<canvas id="canvas" width="1024" height="768"></canvas>
</div>
Fiddle Demo
I'm trying to make a 'draw' app, which allows the user to draw something by dragging their mouse over a canvas.
I want to draw a 'pixel' where the user drags their mouse, however: The location of the mouse and the location where the 'pixels' get drawn are not the same.
I've searched all over the internet but I don't know what the difference is with my version and with theirs.
Image:
HTML
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Drawer</title>
<script src="jquery-2.2.1.min.js"></script>
<script src="scripting/draw.js"></script>
</head>
<body>
<canvas id="drawGround" style="width: 500px; height: 500px; margin: 0 auto; border: 1px solid black;"></canvas>
</body>
</html>
Code:
$(document).ready(function() {
var drawSize = 3;
var canDrawCanvas = false;
const canvasID = "#drawGround";
document.onmouseup = function() {
canDrawCanvas = false;
};
$(canvasID).mousedown(function() {
canDrawCanvas = true;
});
$(canvasID).mousemove(function(event) {
if (canDrawCanvas) handleDrawing(event);
});
function handleDrawing(mouseEvent) {
var canvas = document.getElementById(canvasID.substring(1));
var context = canvas.getContext('2d');
context.fillRect(mouseEvent.pageX, mouseEvent.pageY, drawSize, drawSize);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<canvas id="drawGround" style="width: 500px; height: 500px; margin: 0 auto; border: 1px solid black;"></canvas>
Instead of scaling the canvas object with the "style" attribute, you should use the "width" and "height"-attributes in the canvas-element.
<canvas id="drawGround" width="500px" height="500px" style="margin: 0 auto; border: 1px solid black;"></canvas>
Then use the offsetX and offsetY parameters instead of pageX and pageY to get the tip position of the mouse:
function handleDrawing(mouseEvent) {
var canvas = document.getElementById(canvasID.substring(1));
var context = canvas.getContext('2d');
context.fillRect(mouseEvent.offsetX, mouseEvent.offsetY, drawSize, drawSize);
}
I am using the Html2canvas in order to take a screenshot of a div and display it in a new window. Here is my javascript function
function capture() {
html2canvas(document.getElementById('screenshot'), {
onrendered: function(canvas) {
var img = canvas.toDataURL("image/png");
window.open(img);
}}
);
}
The problem with this code is that it captures only half of the div as the following image shows:
I changed the ID of the element to be captured to 'table' so that I can screenshot the table only. But it seems like the screenshot takes only half of the targeted div (in terms of height).
Now when I select the whole body:
function capture() {
html2canvas(document.body, {
onrendered: function(canvas) {
var img = canvas.toDataURL();
window.open(img);
}
});
the result is as follows:
I made a function that can adjust the output by 1 to 200% of the window height and width. To get your part working, I did the following:
....
html2canvas(document.body, {
onrendered: function(canvas) {
document.body.appendChild(canvas);
canvas.id = "ctx"
var ctx = document.getElementById('ctx');
var img = ctx.toDataURL("image/png");
window.open(img);
},....
Snippet
function hide(ele) {
var ele = document.querySelector(ele);
ele.style.display = 'none';
setTimeout(function() {
ele.style.display = 'block'
}, 1000);
return false;
}
function screenShot() {
var w = document.getElementById('w');
var h = document.getElementById('h');
var winW = window.outerWidth;
var winH = window.outerHeight;
var width = parseFloat(w.value * winW * .01);
var height = parseFloat(h.value * winH * .01);
html2canvas(document.body, {
onrendered: function(canvas) {
document.body.appendChild(canvas);
canvas.id = "ctx"
var ctx = document.getElementById('ctx');
var img = ctx.toDataURL("image/png");
window.open(img);
},
width: width,
height: height
});
return false;
}
main {
position: relative;
width: 100vw;
height: 100vh;
overflow: auto;
}
#panel {
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 50px;
z-index: 1;
}
fieldset {
border-radius: 10px;
background: hsla(120, 100%, 50%, .5)
}
legend {
font: small-caps 700 20px/1.4'Source Code Pro';
}
section {
height: 33vh;
width: 100vw;
}
#sec1 {
background: red;
border: 1px solid blue;
}
#sec2 {
background: white;
border: 1px solid red;
}
#sec3 {
background: blue;
border: 1px solid white;
}
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>34571073</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.min.js"></script>
</head>
<body>
<header id="panel">
<fieldset>
<legend>HTML2Canvas</legend>
<label for="w">Width.:
<input id="w" type="number" min="1" max="200" />%</label>
<br/>
<label for="h">Height:
<input id="h" type="number" min="1" max="200" />%</label>
<br/>
<input type="button" value="Capture" onclick="hide('#panel'); screenShot();" />
</fieldset>
</header>
<main>
<section id="sec1"></section>
<section id="sec2"></section>
<section id="sec3"></section>
</main>
</body>
</html>