Zurück   Flashforum > Flash > Stuff

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 09-05-2011, 10:17   #1 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.367
Post [stuff] swf dynamisch skalieren via ExternalInterface.call und JavaScript function

hi ihrs,

wegen den folgenden beiden threads bin ich auf die idee gekommen und wollte in diese richtung selber mal testen ob das wie gedacht geht:

Anfänger braucht Hilfe
ExternalInterface.call probleme

ob das wirklich sinnvoll ist sei mal dahingestellt, aber es geht. die eingebundene (mit swfobject) swf skaliert selbst ihre größe.
das geschieht über ExternalInterface und den call befehl der eine javascript function aufruft und an diese die parameter für width und height übergibt. das eigentliche skalieren übernimmt also das javascript welches aber von der swf aus geteuert wird.

HIER kann man sich ein bsp. anschauen.

hier mal die html seite mit der javascript function drinn:
HTML-Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
	<head>
		<title>bsp</title>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
		<style type="text/css" media="screen">
			html, body { height:100%; background-color: #ffffff; }
			body { margin:0; padding:0; overflow:hidden; }
			#flashContent { width:100%; height:100%; }
		</style>
		<script type="text/javascript" src="swfobject.js">
		</script>
		<script type="text/javascript">
			var flashvars = {};
			var params = {};
				params.menu = "false";
				params.scale = "noscale";
				params.allowscriptaccess = "always";
			var attributes = {};
			swfobject.embedSWF("bsp.swf", "myContent", "550", "400", "9.0.0", "expressInstall.swf", flashvars, params, attributes);
		</script>

		<script type="text/javascript" >
			function resize( w, h ) {
				var element = document.getElementById( "myContent" );
					element.style.width  = w + "px";
					element.style.height = h + "px";
			} 
		</script>
	</head>
	<body>
		<div id="myContent">
			<h1>Alternative content</h1>
			<p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>
		</div>
	</body>

</html>
hier nochmal gesondert die javascript function:
HTML-Code:
<script type="text/javascript" >
	function resize( w, h ) {
		var element = document.getElementById( "myContent" );
			element.style.width  = w + "px";
			element.style.height = h + "px";
	} 
</script>
und ohne
PHP-Code:
params.allowscriptaccess "always"
klappt das ganze auch nicht. bzw. "sameDomain".

und hier das script aus frame 1 der beispiel fla:
PHP-Code:
//---------------------------------------------------------------

import fl.transitions.Tween;
import fl.transitions.TweenEvent;
import fl.transitions.easing.*;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.external.ExternalInterface;
import flash.utils.Timer;

const 
MINIMUM_WIDTH:int  460;
const 
MINIMUM_HEIGHT:int 260;

const 
JAVASCRIPT_FUNCTION:String "resize";

var 
tweenWidth:Tween;
var 
tweenHeight:Tween;
var 
tweenObject:Object = new Object();
    
tweenObject.width stage.stageWidth;
    
tweenObject.height stage.stageHeight;

stage.align StageAlign.TOP_LEFT;
stage.scaleMode StageScaleMode.NO_SCALE;
stage.addEventListenerEvent.RESIZEresizeHandler );

//---------------------------------------------------------------

resizeButtonClassic.addEventListenerMouseEvent.MOUSE_DOWNmouseDownHandler );
resizeButtonTweening.addEventListenerMouseEvent.MOUSE_DOWNmouseDownHandler );

function 
resizeHandlere:Event ):void {

    
animation.stage.stageWidth animation.width 2;
    
animation.stage.stageHeight animation.height 2;

    
setOutputstage.stageWidthstage.stageHeight );

}

//---------------------------------------------------------------

function mouseDownHandlere:MouseEvent ):void {
    
    if ( 
tweenWidth )
        
tweenWidth.stop();
    if ( 
tweenHeight )
        
tweenHeight.stop();
    
    var 
randomWidth:int =  Math.roundMath.random() * MINIMUM_WIDTH MINIMUM_WIDTH );
    var 
randomHeight:int Math.roundMath.random() * MINIMUM_HEIGHT MINIMUM_HEIGHT );
    
    switch( 
e.target ) {
        
        case 
resizeButtonClassic:
            
tweenObject.width randomWidth;
            
tweenObject.height randomHeight;
            
resizeSWFrandomWidthrandomHeight );
        break;
        case 
resizeButtonTweening:
            
tweenWidth  = new TweentweenObject"width"Strong.easeOuttweenObject.widthrandomWidth2true );
            
tweenHeight = new TweentweenObject"height"Strong.easeOuttweenObject.heightrandomHeight2true );
            
tweenHeight.addEventListenerTweenEvent.MOTION_CHANGEtweenHandler );
        break;

    }

}

//---------------------------------------------------------------

function tweenHandlere:TweenEvent ):void {

    
resizeSWFe.target.obj.widthe.target.obj.height );
    
}

function 
resizeSWFw:inth:int ):void {

    
ExternalInterface.callJAVASCRIPT_FUNCTIONString), String) );
    
}

//---------------------------------------------------------------

function setOutputw:inth:int ):void {
    
    var 
txt:String "width: " String) + "px\nheight: " String) + "px";
    
    
outputStage.text txt;
    
}

setOutputstage.stageWidthstage.stageHeight );

//---------------------------------------------------------------

var timer:Timer = new Timer10);
    
timer.addEventListenerTimerEvent.TIMER timerHandler );
    
timer.start();
    
function 
timerHandlere:TimerEvent ):void {
    
    
outputTimer.text "timer: " e.target.currentCount;
    
}

//--------------------------------------------------------------- 
ist nicht der schönste code, aber er läuft. das wirklich interessante findet in der resizeSWF function statt. da passiert nämlich der call.
im übrigen lässt sich das sogar tweenen. hab das mal mit dazu gepackt und für die ersten schritte die flash eigene tweening engine mit eingebaut.
natürlich empfehle ich aber da eine andere tweening engine einzubauen falls das hier jemand wirklich wo einsetzen will.

die files hab ich mit dazu gepackt. fla CS4, swf, html, swfobject.js
hab alles in einer zip verpackt und HIER zum download abgelegt.

cheers,
sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
salazar ist offline   Mit Zitat antworten
Alt 09-05-2011, 10:55   #2 (permalink)
skylla
 
Benutzerbild von szylla
 
Registriert seit: Feb 2011
Beiträge: 166
hey,
cool!

grüße,
szylla
szylla ist offline   Mit Zitat antworten
Alt 15-05-2011, 13:44   #3 (permalink)
Ehrenwort!!!
 
Benutzerbild von Barschel2004
 
Registriert seit: Feb 2004
Ort: Duisburg-Duissern
Beiträge: 1.114
ist wirklich nett
__________________
"A man on the move... And just sick enough to be totally confident..."

Alphaflight
Ein Tag wie jeder!
Flashversionen von einigen C64-Zocks
Barschel2004 ist offline   Mit Zitat antworten
Alt 18-05-2011, 09:44   #4 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.367
Exclamation

noch ein kleines update, denn der firefox 4 macht hier probleme.

ich hatte bisher nur für die swf eine hintergrundfarbe definiert (also in der swf), und diese wurde auch im ff 3.6, im IE und chrome angezeigt. aber im ff4 klappt, bzw reicht das nicht. hier muss man in jedem fall beim einbinden der swf schon mit angeben welche hintergrundfarbe die swf haben soll.

in der html also bitte bei den params einfach folgende zeile ergänzen und gut ist
Zitat:
params.bgcolor = "#333333";
cheers,
sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
salazar ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Flash CS3] ExternalInterface.call Runey Flash Einsteiger 0 04-11-2010 21:24
Serverübergreifender ExternalInterface.call AS3 zu Javascript labr1005 ActionScript 3 1 25-11-2009 10:33
ExternalInterface.call reneXYX Flash CS3 Professional 2 13-05-2009 16:06
[Flash CS3] XML und ExternalInterface.call gerfried Flash Einsteiger 0 02-03-2009 11:52
ExternalInterface.call RhettButler Flash CS3 Professional 8 10-02-2009 14:50


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:41 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele