Avatar billede stinejh1980 Nybegynder
22. februar 2010 - 14:35 Der er 10 kommentarer og
1 løsning

dynamisk slideshow

Jeg stiler efter et lignende slideshow:
http://www.dynamicdrive.com/dynamicindex14/image4.htm

Men billederne skulle gerne være dem jeg har i følgende mappe:
images/SlideShow/Frontpage/

Jeg har lavet følgende function:
    Public Shared Function GetSlideArray()
        Dim i As Integer
        Dim myFile As String
        Dim ImageFolder As String
     
ImageFolder = System.Configuration.ConfigurationManager.AppSettings("FrontSlide")


        Dim filesSlideShowImages() As String = IO.Directory.GetFiles(ImageFolder)

        '*** SlideShowImages
        myFile = ""
        For i = 0 To filesSlideShowImages.GetUpperBound(0)
            Dim file As New System.IO.FileInfo(filesSlideShowImages(i))
            If i = 0 Then
                myFile = "'images/SlideShow/Frontpage/" & file.Name & "'"
            Else
                myFile = myFile + ",'images/SlideShow/Frontpage/" & file.Name & "'"
            End If
            'myarray =
            'myarray = myFile.ToCharArray()
        Next
        Return myFile
    End Function

Og har uden held forsøgt følgende:
        LblArray.Text = SharedFunctions.GetSlideArray()

var slideimages=new Array(document.getElementById('LblArray').innerText)

Er der nogen der kan hjælpe
Avatar billede tjens Nybegynder
22. februar 2010 - 17:54 #1
Hovedparten af den kode du har vist: Er det serverside ASP?

Hvis ja: Du skal lade din ASP spytte javascript ud som tekst. Senere bliver det "teksten" udført i browseren på klienten.
<script>
...

var slideimages=new Array(
<% 
Response.Write SharedFunctions.GetSlideArray()
%>
);
...
(Jeg ved ikke om det hedder Response.Write eller print eller ? i dit serverside sprog)
Avatar billede stinejh1980 Nybegynder
23. februar 2010 - 08:23 #2
Jeg koder i ASP.NET og VB.NET

I min VB ville man skrive
Response.Write(SharedFunctions.GetSlideArray())

Men jeg forstår ikke lige hvordan det skal hjælpe mig?
Avatar billede tjens Nybegynder
23. februar 2010 - 10:54 #3
Dit ASP kører på serveren, og kan derfor lave en liste over billederne.

Dit javascript kører i klienten. D.v.s. på et andet og senere tidspunkt på en anden computer.

Derfor er javascript bare en tekst der skal sendes til klienten, ligesom HTML og CSS, hvis man ser det fra serverens og ASP'ens side.

Dit javascript så sådan ud på demosiden:
...
//specify interval between slide (in mili seconds)
var slidespeed=3000

//specify images
var slideimages=new Array("image1.gif","image2.gif","image3.gif")

//specify corresponding links
...


Det vil du gerne ændre til:
...
//specify interval between slide (in mili seconds)
var slidespeed=3000

//specify images
var slideimages=new Array("images/SlideShow/Frontpage/myFirstPic.jpg", "images/SlideShow/Frontpage/mySecondPic.jpg", "images/SlideShow/Frontpage/image3.gif")

//specify corresponding links
...


Det opnår du ved at skrive:
...
//specify interval between slide (in mili seconds)
var slidespeed=3000

//specify images
var slideimages=new Array(
<% 
Response.Write( SharedFunctions.GetSlideArray() )
%>
);

//specify corresponding links
...

Så vil din ASP udfylde din javascript, så den er klar til at køre i browseren.

PS: Du kan selvfølgelig ikke have javascriptet som en include, når det skal være dynamisk, som i dette tilfælde.
Avatar billede stinejh1980 Nybegynder
23. februar 2010 - 10:59 #4
Virker ikke jeg får følgende fejl:
Navnet 'SharedFunctions' er ikke blevet erklæret.
Avatar billede stinejh1980 Nybegynder
23. februar 2010 - 11:12 #5
Reeltset "tror jeg" min kode virkede fint, hvis jeg bare kunne finde ud af at bestemme hvilken række følge min funktioner blev loaded.

I code behind fylder jeg min label med strengen til min array, men min javascript bliver fyrret af før pageload.
Avatar billede tjens Nybegynder
23. februar 2010 - 18:17 #6
#4 Så må du bare rykke definitionen af SharedFunctions højere op.
Avatar billede tjens Nybegynder
23. februar 2010 - 18:22 #7
#5 Så skal du flytte linien til sidens javascript onload funktion.
Husk at checkke hvor variablen defineres, så der kun er en global definition.
Avatar billede stinejh1980 Nybegynder
24. februar 2010 - 09:45 #8
Smid et svar :-)
Avatar billede tjens Nybegynder
24. februar 2010 - 11:55 #9
Svar
Avatar billede stinejh1980 Nybegynder
24. februar 2010 - 12:09 #10
Min endelige løsning blev dog at lave det hele fra Codebehind.
Her er min løsning hvis andre skulle få brug for det - kodet i ASP.NET og VB.NET

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server"> 
    <title>Slide Show</title>
</head>
<body>
    <form id="form1" runat="server">
    <img src="images/SlideShow/Frontpage/Do_Not_Delete.jpg" alt="SlideShow" name="slide" border="0" style="filter:blendTrans(duration=3)" />
    </form>
</body>
</html>

Code Behind:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ' Define the name and type of the client scripts on the page.
        Dim csname1 As [String] = "PopupScript1"
        Dim cstype1 As Type = Me.[GetType]()

        ' Get a ClientScriptManager reference from the Page class.
        Dim cs1 As ClientScriptManager = Page.ClientScript

        ' Check to see if the startup script is already registered.
        If Not cs1.IsStartupScriptRegistered(cstype1, csname1) Then
            Dim cstext1 As New StringBuilder()
            cstext1.Append("<script language='javascript' type='text/javascript'> var slidespeed=500")
            cstext1.Append(" " & Environment.NewLine & " ")
            cstext1.Append("var slideimages=new Array(" & SharedFunctions.GetSlideArray() & ")")
            cstext1.Append(" " & Environment.NewLine & " ")
            cstext1.Append("var slidelinks=new Array('www.dynamicdrive.com','javascriptkit.com','www.geocities.com')")
            cstext1.Append(" " & Environment.NewLine & " ")
            cstext1.Append("var imageholder=new Array()")
            cstext1.Append(" " & Environment.NewLine & " ")
            cstext1.Append("var ie=document.all")
            cstext1.Append(" " & Environment.NewLine & " ")
            cstext1.Append("for (i=0;i<slideimages.length;i++){")
            cstext1.Append(" " & Environment.NewLine & " ")
            cstext1.Append("imageholder[i]=new Image()")
            cstext1.Append(" " & Environment.NewLine & " ")
            cstext1.Append("imageholder[i].src=slideimages[i]")
            cstext1.Append(" " & Environment.NewLine & " ")
            cstext1.Append("}")
            cstext1.Append(" " & Environment.NewLine & " ")
            cstext1.Append("function gotoshow(){ ")
            cstext1.Append(" " & Environment.NewLine & " ")
            cstext1.Append("if (newwindow)")
            cstext1.Append(" " & Environment.NewLine & " ")
            cstext1.Append("window.open(slidelinks[whichlink])")
            cstext1.Append(" " & Environment.NewLine & " ")
            cstext1.Append("else")
            cstext1.Append(" " & Environment.NewLine & " ")
            cstext1.Append("window.location=slidelinks[whichlink] ")
            cstext1.Append(" " & Environment.NewLine & " ")
            cstext1.Append("} ")
            cstext1.Append(" " & Environment.NewLine & " ")
            'alert('Hello World!')")
            cstext1.Append("</script>")

            cs1.RegisterStartupScript(cstype1, csname1, cstext1.ToString())
        End If

        Dim csname2 As [String] = "PopupScript2"
        Dim cstype2 As Type = Me.[GetType]()

        ' Get a ClientScriptManager reference from the Page class.
        Dim cs2 As ClientScriptManager = Page.ClientScript

        ' Check to see if the startup script is already registered.
        If Not cs2.IsStartupScriptRegistered(cstype2, csname2) Then
            Dim cstext2 As New StringBuilder()
            cstext2.Append("<script language='javascript' type='text/javascript'> var whichlink=0")
            cstext2.Append(" " & Environment.NewLine & " ")
            cstext2.Append("var whichimage=0")
            cstext2.Append(" " & Environment.NewLine & " ")
            cstext2.Append("var blenddelay=(ie)? document.images.slide.filters[0].duration*1000 : 0")
            cstext2.Append(" " & Environment.NewLine & " ")
            cstext2.Append("function slideit(){")
            cstext2.Append(" " & Environment.NewLine & " ")
            cstext2.Append("if (!document.images) return")
            cstext2.Append(" " & Environment.NewLine & " ")
            cstext2.Append("if (ie) document.images.slide.filters[0].apply()")
            cstext2.Append(" " & Environment.NewLine & " ")
            cstext2.Append("document.images.slide.src=imageholder[whichimage].src")
            cstext2.Append(" " & Environment.NewLine & " ")
            cstext2.Append("if (ie) document.images.slide.filters[0].play()")
            cstext2.Append(" " & Environment.NewLine & " ")
            cstext2.Append("whichlink=whichimage")
            cstext2.Append(" " & Environment.NewLine & " ")
            cstext2.Append("whichimage=(whichimage<slideimages.length-1)? whichimage+1 : 0")
            cstext2.Append(" " & Environment.NewLine & " ")
            cstext2.Append("setTimeout('slideit()',slidespeed+blenddelay)")
            cstext2.Append(" " & Environment.NewLine & " ")
            cstext2.Append("}")
            cstext2.Append(" " & Environment.NewLine & " ")
            cstext2.Append("slideit()")
            cstext2.Append(" " & Environment.NewLine & " ")
            cstext2.Append("</script>")

            cs2.RegisterStartupScript(cstype2, csname2, cstext2.ToString())
        End If
    End Sub

Min SharedFunctions.vb:

    Public Class SharedFunctions
    Inherits System.Web.UI.Page


    Public Shared Function GetSlideArray()
        Dim i As Integer
        Dim myFile As String

        Dim ImageFolder As String
        ImageFolder = System.Configuration.ConfigurationManager.AppSettings("FrontSlide")

        Dim filesSlideShowImages() As String = IO.Directory.GetFiles(ImageFolder, "*.jpg")

        '*** SlideShowImages
        myFile = ""
        For i = 0 To filesSlideShowImages.GetUpperBound(0)
            Dim file As New System.IO.FileInfo(filesSlideShowImages(i))
            If i = 0 Then
                myFile = "'images/SlideShow/Frontpage/" & file.Name & "'"
            Else
                myFile = myFile + ",'images/SlideShow/Frontpage/" & file.Name & "'"
            End If
        Next

        Return myFile

    End Function

End Class
Avatar billede stinejh1980 Nybegynder
24. februar 2010 - 12:12 #11
Glemte lige at sige at følgende skal tilføjes i web.config:
<appSettings>
<add key="FrontSlide" value="C:\[Stien til placering af billeder]"/>
</appSettings>

Grunden til jeg har gjort det på denne måde er at filerne er placeret et andet sted på min localhost end på web-serveren. Så derfor har jeg forskellige web.config.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester