webForumDet fria alternativet

Problem med slideshow

1 svar · 383 visningar · startad av saw

sawMedlem sedan mars 20011 880 inlägg
#1

Jag har försökt att bygga upp en slideshow med effekter men det går illa.
Först så försökte jag med Ajax, men fick inte ihop det för effekterna.
Sen hittade jag följande: (ber om ursäkt för att det är ganska så mycket kod)

<script type="text/javascript">
        //A timer will be fired in 5 seconds to call getNextImage()
        var c_interval = 5000;
        window.setTimeout("getNextImage()", c_interval);
        
        function getNextImage()
        {
            //Send the request to server with the current image url as the 
argument
            CallServer(document.getElementById("photo").src, "");
        }
                  
        function ReceiveServerData(rValue)
        {
            //Receive server's response of a string rValue, which is
 prepared in the server's function
            //GetCallbackResult()
            var wds = rValue.split(";");
            //Assign the transition effect
            document.getElementById("photo").style.filter = wds[1];
            //Preload the image file from server.  
When finishing download, imageLoaded function will be called
            //with the img object as the argument                           
            var img  = new Image();
            img.onload = function(){ imageLoaded(this); }
            img.onerror = function(){ imageError(this); }
            img.onabort = function(){ imageError(this); }
            img.src = wds[0];                                            
        }
        function imageError(img)
        {
            //If image download errors occur, this function will be called.
            window.setTimeout("getNextImage()", 1000);
        }
        function imageLoaded(img)
        {
            var photo = document.getElementById("photo"); //Find the image control object
            photo.filters[0].apply();                       //Apply the transition effect
            photo.filters[0].play();                        //Play the effect and display the new image
            photo.ImageUrl = GetNextImageUrl();                           
//Assign the image to the image control
            
            window.setTimeout("getNextImage()", c_interval);
//Initiate the next request
        }
    </script>

<asp:Image ID="photo" runat="server" Height="160px" ImageUrl="~/Image/danmark_kopenhamn_tivoli.jpg"/>

// i codebehind
 string m_lastFileName = "none";
if (IsPostBack)
            return;
        //photo.Src = GetNextImageUrl();
        photo.ImageUrl = GetNextImageUrl();
        //Register Ajax client script to client's browsers.  
This has to be hard coded.

        string cbReference = Page.ClientScript.GetCallbackEventReference
(this, "arg", "ReceiveServerData", "context");
        string callbackScript = "function CallServer(arg, context)" + "{ " + 
cbReference + "} ;";
        Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "CallServer", 
callbackScript, true);

public void RaiseCallbackEvent(string eventArgument)
    {
        //This is first place to receive the callback from client's browser.  
The parameter 'eventArgument'
        //is the parameter passed from the Javascript's call 'CallServer()'.  
In this example, it is the
        //last image url.
        m_lastFileName = Path.GetFileName(eventArgument);
    }

    public string GetCallbackResult()
    {
        //This is the second call triggled by the 'CallServer()' and it is the place 
to prepare and return a string
        //to the client.  Here the returned string is the image url and the 
transition effect.
        return GetNextImageUrl() + ";" + GetNextTransition();
    }

    private string GetNextImageUrl()
    {
        //Randomly pick a image file in the server.
        string[] files = Directory.GetFiles
(AppDomain.CurrentDomain.BaseDirectory + "Image", "*.jpg");
        if (files.Length == 0)
            return string.Empty;

        while (true)
        {
            int n = (int)((files.Length - 1) * (new Random()).NextDouble());
            //Do not want to repeat the last image
            if (files[n].IndexOf(m_lastFileName) < 0)
            {
return files[n].Replace(AppDomain.CurrentDomain.BaseDirectory, 
string.Empty);
            }
        }
    }

    private string GetNextTransition()
    {   //Randomly pick a transition effect.  Note some of the effects 
only work in IE.
        int n = (int)((new Random().NextDouble()) * 5);
        switch (n)
        {
            case 0:
            case 1:
                n = (int)((new Random().NextDouble()) * 22);
                return "revealTrans(duration=2,transition=" + n.ToString() + ")";
            case 2:
            case 3:
                if (Request.Browser.Browser == "IE")
                {
                    n = (int)((new Random().NextDouble()) * 8);
                    switch (n)
                    {
                        case 0:
                            return "progid:DXImageTransform.Microsoft.RandomDissolve()";
                        case 1:
    return "progid:DXImageTransform.Microsoft.Pixelate(MaxSquare=20, 
Duration=2, Enabled=false)";
                        case 2:
    return "progid:DXImageTransform.Microsoft.RadialWipe(wipeStyle='clock')";
                        case 3:
    return "progid:DXImageTransform.Microsoft.Wheel(spokes=4)";
                        case 4:
    return "progid:DXImageTransform.Microsoft.Stretch(stretchStyle='spin')";
                        default:
    return "progid:DXImageTransform.Microsoft.Stretch(stretchStyle='push')";
                    }
                }
                else
                    return "blendTrans(duration=2)";
            default:
                return "blendTrans(duration=2)";
        }
    }

Jag får följande error

Det gick inte att hitta målet för återanropet (__Page), eller så implementerar 
målet inte ICallbackEventHandler.
och då pekar den på
string cbReference = Page.ClientScript.GetCallbackEventReference
(this, "arg", "ReceiveServerData", "context");
sawMedlem sedan mars 20011 880 inlägg
#2

Jag misstänker att ett av felen kan vara här:

CallServer(document.getElementById("photo").src, "");

..eftersom..

photo.ImageUrl = GetNextImageUrl();
//och
<asp:Image ID="photo" runat="server" Height="160px" ImageUrl=""/>

men när jag försöker med document.getElementById("photo"). så finns
inte ImageUrl.
Några tips?

Försöker jag med

CallServer(document.getElementById("photo").ImageUrl(''),"");

Så får jag error

'document.getElementById(...) är null eller inte ett object'

..det här var jobbigt...

135 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)