Resize flash dynamically with javascript and actionscript
A simple and efficient way of dynamically resizing flash embedded objects with javascript and actionscript. Ever wanted to change the dimensions of a flash movie on-the-fly without refreshing the page? If yes, read on!
The idea is to wrap your flash movie within a div and embed it with swfobject making its width and height 100%. Resizing the wrapper div with javascipt is very simple and can be done with a single jquery function in the html code. The same function can also be called from flash using a simple getURL action, resulting an easy way of accomplishing the goal of dynamically resizing flash movies.
The code
Firstly we need to insert our flash movie in the html using swfobject. In our example the flash movie is resized.swf. Inside the head tag insert:
<script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" type="text/javascript"></script> <script type="text/javascript"> var flashvars = { }; var params = { allowFullScreen: "true", menu: "false", wmode: "window" }; var attributes = { id: "resized", name: "resized", wmode: "window" }; swfobject.embedSWF("resized.swf", "resized", "100%", "100%", "10.0.0", "expressInstall.swf", flashvars, params, attributes); </script>
Note that we’re giving the embedded swf a width and height of 100% and for some caching speed, we load the swfobect from Google.
We also need to load the jQuery that we’ll need for our javascript function later on. We load jQuery also from Google by inserting still inside head tag:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js" type="text/javascript"></script>
We now need some CSS for the wrapper div that’ll hold the flash movie and set its initial dimensions. For simplicity we’ve given it an id of resized.
#resized{width:550px; height:400px; margin:20px 40px;}
We insert the div in our markup and we also create a text link that we’ll use to call the jquery function.
<div id="resized"></div> <div><a href="#" onclick="ResizeFlash('800','1200'); return false">Set width: 800px - height: 1200px</a></div>
In ResizeFlash function, the first number (800) corresponds to the new width (in pixels) we want our flash to change and the second (1200) to the new height. We can also use percentages (e.g. 90%) instead of pixel values and leaving any of the 2 parameters empty will result in resizing only one dimension. For instance, writing ResizeFlash('','1200');
will set the height of flash to 1200px while leaving its width as it is.
So know we need to insert the actual javascript function that’ll do the trick of resizing the div holder. At the very end of our document, right before the closing body tag insert:
<script> function ResizeFlash(newWidth,newHeight){ if(newWidth){ $("#resized").css("width",newWidth); } if(newHeight){ $("#resized").css("height",newHeight); } } </script>
The function checks if width and height parameters are set and if they are, gets their values and applies a new CSS style to the div.
The Flash (Actionscript 2.0)
Calling the function from within the flash is very easy with the use of the getURL action. So create the movie with flash and give it the name resized. Create a new button and give it an instance name of btn1. Then make an onRelease function in a frame in timeline and insert “javascript:ResizeFlash(”,’1000′);” as the URL inside the getURL action:
btn1.onRelease=function(){ getURL("javascript:ResizeFlash('','1000');"); }
The button, when clicked will set the flash movie height to 1000 pixels. You can see that we call the javascript function and set its parameters exactly like we do in html text links. Export the movie as resized.swf and you’re done 😉
In order to see the result, you need to upload your files on your server. If you wanna check it locally, you’ll need to change the flash player security settings (right-click swf, select “Global Settings…”).
thanks for giving that type of information. Really enjoyed this blog post. Really looking forward to reading more. Much obliged.
We are really grateful for your blog post.
Its Work For me. Great work.
I love this suggestions & i ask 1 question how to convert wordpress to html plz help am beginner for this line
Very Helpful Information, I like it Very Much.. Thanks for this post
Much thanks to you. That is an extraordinary code.
I noticed that I can’t set tallness to 100%, any thought of how I can make it ?
Great information provided by this post. It really helps to
Resize flash dynamically with javascript and Actionscript to the user. Keep sharing such type of information.
I noticed a problem too. I guess is’s the same what Stampy wrought.
When javascript resize is called the div is resized and flash is resized too, but only in heigth not proportionally. After a ~millisecond it gets it’s correct size.
It happens with Chrome and Firefox. In IE it’s all ok.
Doe’s anyone know a workaround?
that thing you said it’s happening to me in a flash website I made. it looks verry awfull, vertically streched for a second… I don’t know how to fix it!! It happend to me only in Chrome. In Firefox works well.
I tend not to leave many remarks, however i did
some searching and wound up here Resize flash dynamically with javascript and actionscript – malihu | web design.
And I actually do have a couple of questions for you if
you tend not to mind. Is it only me or does it look as if like some
of these comments look like coming from brain dead
folks? 😛 And, if you are posting on other online sites, I would like to keep up with anything fresh you have to post.
Would you make a list of the complete urls of all your
public pages like your twitter feed, Facebook page or linkedin profile?
One problem I’ve noticed, is that in Firefox, you can’t seem to resize the window properly. It’s strange as it works absolutely fine in Internet Explorer and Chrome. I assume its more of a bug with Firefox rather than anything else. Hopefully it’ll be one that’ll get fixed.
works perfect with action script 3.0.
you just have to call ResizeFlash via ExternalInterface (like every other js function).
Hello, I am trying to put the flash object on the webpage but the white background is showing up all over the page on top of the other content. Can someone please tell me how to isolate the flash object from the background and place the flash at a specific location of the web page.
Thanks
Is it easy to change also the margins of the element on click ?
It would be great also to be able to adjust the positioning.
And how about easing the transition? Is it simple to do?
Thanks a lot man! This is really helpful!
Auto resize div – no need to set any values 😉
See the scripts in action:
http://www.kataskeves.com.gr/
Manos, thank you for the excellent starting point 🙂
Mike
/////////////////////////////////////////////
Flash
var curHeight:Number = this._height;
var newHeight:Number = Math.round(curHeight) + 64;
getURL(“javascript:ResizeContent(” + newHeight + “);”);
==============================================
HTML
function ResizeContent(newHeight){
var FLContainer = document.getElementById(‘contentContainer’);
FLContainer.style.height = newHeight + ‘px’;
}
Great!
Thank you for posting your mod 🙂
This is exactly what I’ve been searching for days, thanks a lot!!
Thank you, powerful!
Just thought about resizing from the top RIGHT corner.
I made simple and it works perfect in Opera & Safari, but Firefox, Chrome & IE (off course ) that shows buggy (with blinking…).
Please, if you have any solution. Here is my example files:
Thanks in advance!
very nice sharing. I’m looking for a similar code in the form of a slide and dragging it horizontally, but could change the size of the possible?
Hi, great code but this is manually resized by hitting a button.
How can I get this to automatically resize a movie to 90% when a page is loaded ?
You can simply call ResizeFlash function on window load like this:
window.onload=function(){ ResizeFlash('90%'); }
or on body tag:
<body onload="ResizeFlash('90%'); ">
I like the your Idea!
Hi, I’m having an issue using the getURL function in Flash as2. I notice that I needed to change the flash player to version 7 in order to work. Is there a way of this working with flash player 1o? Or would I need to change the getURL to ExternalInterface (which I’m not too familiar with) in order to work with version 10? Thanks in advance.
Great work. Thanks for sharing
Sorry. I noticed when it’s published online it works. Thanks again.
Thank you. That is a great code.
I noted that I cannot set height to 100%, any idea of how I can make it ?
In order to set an element height to 100% you need to set its parent height also (for xhtml). For example in the demo, the parent of #resized is the body. So in order to set #resized height to 100%, in the css, you’d need to add firstly:
html,body{height:100%;}
This is a really helpful tutorial! Thanks for sharing.
its works all browsers, thanks.
i have IE 8 and i wont make 100% height i doesn’t work for me
I have latest flash player
In order to have an element be 100% height, you need to add on your css: html,body{height:100%}
Yea, scratch that/delete that comment. getURL local v.
Yes, sometimes IE has issues updating flash to latest version
thank. good job.
Really nice Work let me try it. Thanks for sharing.
The actionscript resize buttons don’t seem to be working for me. The javascript resizing works fine but inside flash: nothing.
Yea, scratch that/delete that comment. getURL local v. live got it…
Wow this is very good. It works in firefox, but IE doesn`t show the flash movie. Or i`m missing something?
Never mind works perfect in IE too. The problem was in mine IE 🙂
Yes, sometimes IE has issues updating flash to latest version
Cool.
Now if only you made it so the user can enter their own value in an input box. 🙂
Good suggestion. I’ll try to find some time to implement it. Thanks!