I was wondering how I could go about making a camera-like view where I could scroll a level within a canvas element just like this:
2D side scrolling camera view in html5
23k Views Asked by Oni Enzeru At
2
There are 2 best solutions below
4
hobberwickey
On
I've always found it's more efficient to wrap your canvas in a div with the width and height of your viewport and the overflow set to hidden then just draw your whole canvas and scroll the div to where you where you want to view.
So the html would be:
<div id='wrapper' style='width: 200px; height: 200px; overflow: hidden;'>
<canvas width='1000' height='1000'></canvas>
</div>
and the javascript would be something like
function scrollWrapper(x, y){
var wrapper = document.getElementById('wrapper');
wrapper.scrollTop = x;
wrapper.scrollLeft = y;
}
Then just call the function with the x and y you want to view. you could wrap it in a setTimeout or something if you wanted to move there instead of just jumping there.
Related Questions in JAVASCRIPT
- Angular Show All When No Filter Is Supplied
- Why does a function show up as not defined
- I count the time the user takes to solve my quiz using Javascript but I want the same time displayed on another page
- Set "More" "Less" font size
- Using pagination on a table in AngularJS
- How to sort these using Javascript or Jquery Most effectively
- how to fill out the table with next values in array with one button
- State with different subviews
- Ajax jQuery firing multiple time display event for the same result
- Getting and passing MVC Model data to AngularJS controller
- Disable variable in eval
- javascript nested loops waiting for user input
- .hover() seems to overwrite .click()
- How to sort a multi-dimensional array by the second array in descending order?
- How do I find the fonts that are not loading in a CORS situation ( MoovWeb )?
Related Questions in HTML
- Delay in loading Html Page(WebView) from assets folder in real android device
- Why does a function show up as not defined
- CSS Class is not applying to element (border width,color,and style attributes)
- How to sort these using Javascript or Jquery Most effectively
- how to fill out the table with next values in array with one button
- Automatically closing tags in form input?
- Positioning child at bottom of parent with scroll
- Remove added set of rows
- Website zoomed out on Android default browser
- Twitter Bootstrap horizontal form elements on a line
- http://sigmajs.org/ les mis tutorial - why are my canvases 0 height?
- My navbar is not expanding after collapse
- when a checkbox is checked how to display a different hidden element using javascript
- Gaps Vertically Using Dividers
- Svg containers not positioning properly
Related Questions in CANVAS
- http://sigmajs.org/ les mis tutorial - why are my canvases 0 height?
- How to know whether the mousedown event is occured on where we want in canvas?
- Scrollbar for Message Widget in Tkinter
- Resize function canvas loaded on shrinked browser and expanded
- Canvas - Rotate line
- html5 canvas circle palette
- How can I make a button who draws a line
- The canvas.drawpath not work for me
- Touch listener on path android canvas
- html5 canvas with image: save original imagesize
- On iOS, how do I resize a very large image on the client side in a web app?
- Easeljs snap to grid
- a border where you can not go through (canvas game)
- How can I implement a zoom function in a 2D canvas?
- THREE.JS MakeTextSprite properties
Related Questions in CAMERA
- matlab crash during acquisition of pointgrey images
- My application has the camera access permission by default.How can i turned it off and ask for permission?
- 3d mouse aim camera 3rd person vertical C#
- Saving images as a burst on iOS
- Camera position based on model size?
- Three.js, Camera rotation around a point
- Android camera2.params.face rectangle placement on canvas
- Error with image view when displaying an image by camera capturing
- AVFoundation: toggle camera fails at CanAddInput
- CWAC-camera exception "Method called after release()" after exiting
- How to exactly fit camera preview to the screen
- Lock Camera orientation to portrait
- UICollectionView not showing images from CameraImage - Objective C
- Picture taken in portrait mode rotates
- android unable to resume activity on result using camera
Related Questions in SIDE-SCROLLER
- Monogame Basic Collision Detection Fails to Work
- scrolling never-ending background in Game not working as expected
- Cocos2d: SIGABRT error with sprite sheets
- cocos2d: why isn't label appearing?
- Cocos2d: .plist file giving me a SIGABRT error
- Cocos2d: thread error when trying to add background music
- Automatically scrolling to my player using p5.js, but it does not work
- 2D Camera translations
- I need to have an array of backgrounds?
- 2D side scrolling camera view in html5
- Adjusting the ship's speed and limiting the ship's range Python Pygame
- Unity3d - Rigidbody vs CharacterController vs transform.Translate for Sidescroller
- How to put the player in the center of a libgGDX camera
- How to randomly spawn ccsprites one at a time with a delay in between
- Adding enemies to screen one at a time in an endless loop with a delay in between each one but it does not work
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?

So you want a 500x500 canvas to display something (a game level) that is really 9000x500 or so.
This is fine. What you do is think of the canvas as a "viewport" for a larger scene. You translate the canvas (or everything else) to the appropriate spot and draw all of the relevant things at that spot.
Here's an example:
http://jsfiddle.net/hKrrY/
Click on the canvas and hold down your left arrow key to see the scene go by while the red player dot stays "still".
As you scroll by the 100x100 canvas, you are seeing objects that are being drawn at once-offscreen locations like (330,50). Translating the canvas brings them into view.
I guess its worth mentioning that this is where making optimizations in a canvas starts to really matter. The example I gave above is a very simplistic way to make a viewport, and as your code progresses you're going to want to think more and more about what it is you're drawing and how much you're drawing. You'll want to avoid drawing objects that are completely offscreen, for instance, and if your game or app has a background that is 9000x500 you probably don't want to be drawing the entire thing every time!
So the concept is the takeaway here, but you'll want to think very hard about how you implement it and how much work you are making the canvas do. If you end up with performance problems in your side-scrolling app, be sure to let us know :)