Page 1 of 2 12 LastLast
Results 1 to 10 of 11

Thread: help with Featured Content Slider

  1. #1
    Join Date
    Jul 2006
    Posts
    31
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default help with Featured Content Slider

    1) Script Title: Featured Content Slider

    2) Script URL (on DD): http://www.dynamicdrive.com/dynamici...tentslider.htm

    3) Describe problem: How can I display the linktext items in more than 1 line? It wraps with no margin

  2. #2
    Join Date
    Aug 2004
    Posts
    10,140
    Thanks
    3
    Thanked 1,008 Times in 993 Posts
    Blog Entries
    16

    Default

    Inside the .js file, the following portion of the code basically deals with the look of the pagination links:

    Code:
    for (var i=0; i<slidernodes[sliderid].length; i++) //For each DIV within slider, generate a pagination link
    		pcontent+='<a href="#" onClick=\"ContentSlider.turnpage(\''+sliderid+'\', '+i+'); return false\">'+(slider.paginateText? slider.paginateText[i] : i+1)+'</a> '
    	pcontent+='<a href="#" style="font-weight: bold;" onClick=\"ContentSlider.turnpage(\''+sliderid+'\', parseInt(this.getAttribute(\'rel\'))); return false\">'+(slider.nextText || "Next")+'</a>'
    What are you trying to do as far as insert a linebreak (ie: after which pagination link)?

  3. #3
    Join Date
    Jul 2006
    Posts
    31
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default

    Thanks for the reply. I have about 10 items (content div) and use text for the nav similar to:

    var linktext=["horses1", "scenery1", "ocean1", horses2", "scenery2", "ocean2", horses3", "scenery3", "ocean3", "sushi3"] //custom pagination links text array
    ContentSlider("slider1", 3000, linktext) //Auto rotate slider plus custom pagination links text


    The buttons will not fit within the width of the content window. How do I display them in two lines? As it is, the script auto wraps the buttons to next line with no spacing between them and does not look very good.

  4. #4
    Join Date
    Aug 2004
    Posts
    10,140
    Thanks
    3
    Thanked 1,008 Times in 993 Posts
    Blog Entries
    16

    Default

    Not tested yet, but try doing something like:

    Code:
    var linktext=["horses1", "scenery1", "ocean1", horses2<br />", "scenery2", "ocean2", horses3", "scenery3", "ocean3", "sushi3"]

  5. #5
    Join Date
    Jul 2006
    Posts
    31
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default

    Thanks.

    Putting the <br /> tag works on Firefox but not on IE. The tag has to be put in front of the next item like this:

    var linktext=["horses1", "scenery1", "ocean1", "horses2", "<br />scenery2", "ocean2", horses3", "scenery3", "ocean3", "sushi3"]

    but this will leave the margin space at the end of the first line

    I need to make it work for IE

  6. #6
    Join Date
    Aug 2004
    Posts
    10,140
    Thanks
    3
    Thanked 1,008 Times in 993 Posts
    Blog Entries
    16

    Default

    Hmm it works for me in IE7. Do you have a link to the problem page?

  7. #7
    Join Date
    Jul 2006
    Posts
    31
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default

    Yes, it will wrap in IE7 but there's no spacing between line 1 and 2

    In Firefox, putting <br /> tag at the end of an item will have same effect, no spacing between line 1 & 2:

    var linktext=["horses1", "scenery1", "ocean1", "horses2<br />", "scenery2", "ocean2", horses3", "scenery3", "ocean3", "sushi3"]

    Putting the <br /> tag at the beginning of an item works well except there's a gap from the padding at the end of the line

    I tried to change css but could not get it to work.

  8. #8
    Join Date
    Aug 2004
    Posts
    10,140
    Thanks
    3
    Thanked 1,008 Times in 993 Posts
    Blog Entries
    16

    Default

    Ok, one way that should work for sure is to wrap each line of pagination links within a DIV tag. So, inside the .js file, find this chunk of code:

    Code:
    	var pcontent=""
    	for (var i=0; i<slidernodes[sliderid].length; i++) //For each DIV within slider, generate a pagination link
    		pcontent+='<a href="#" onClick=\"ContentSlider.turnpage(\''+sliderid+'\', '+i+'); return false\">'+(slider.paginateText? slider.paginateText[i] : i+1)+'</a> '
    and replace it with:

    Code:
    	var pcontent="<div>"
    	for (var i=0; i<slidernodes[sliderid].length; i++) //For each DIV within slider, generate a pagination link
    		pcontent+='<a href="#" onClick=\"ContentSlider.turnpage(\''+sliderid+'\', '+i+'); return false\">'+(slider.paginateText? slider.paginateText[i].replace("<br />", "") : i+1)+'</a> ' + (slider.paginateText && /<br/i.test(slider.paginateText[i])? "</div><div style='margin-top: 3px'>" : "")
    Note the code in red- this is the margin between the each line of pagination links, by default, 3px.

    You would still use the <br /> tag when calling the script where you want a new line to occur:

    Code:
    var linktext=["horses1", "scenery1", "ocean1", "horses2<br />", "scenery2", "ocean2", "horses3", "scenery3", "ocean3", "sushi3"]
    The script will replace the <br /> tag with the appropriate DIV tag.
    Last edited by ddadmin; 08-11-2007 at 06:49 AM.

  9. #9
    Join Date
    Jul 2006
    Posts
    31
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default

    I got this javascript error:

    Error: slider.paginateText[i] has no properties
    Source File: contentslider.js
    Line: 50

    Line 50 is in red color below:

    //** Featured Content Slider script- Dynamic Drive DHTML code library (http://www.dynamicdrive.com)
    //** Last updated: Feb 28th- 07- Added ability to customize pagination links' text

    ////Ajax related settings
    var csbustcachevar=0 //bust potential caching of external pages after initial Ajax request? (1=yes, 0=no)
    var csloadstatustext="<img src='loading.gif' /> Requesting content..." //HTML to indicate Ajax page is being fetched
    var csexternalfiles=[] //External .css or .js files to load to style the external content(s), if any. Separate multiple files with comma ie: ["cat.css", dog.js"]

    ////NO NEED TO EDIT BELOW////////////////////////
    var enablepersist=true
    var slidernodes=new Object() //Object array to store references to each content slider's DIV containers (<div class="contentdiv">)
    var csloadedobjects="" //Variable to store file names of .js/.css files already loaded (if Ajax is used)

    function ContentSlider(sliderid, autorun, customPaginateText, customNextText){
    var slider=document.getElementById(sliderid)
    if (typeof customPaginateText!="undefined" && customPaginateText!="") //Custom array of pagination links text defined?
    slider.paginateText=customPaginateText
    if (typeof customNextText!="undefined" && customNextText!="") //Custom HTML for "Next" link defined?
    slider.nextText=customNextText
    slidernodes[sliderid]=[] //Array to store references to this content slider's DIV containers (<div class="contentdiv">)
    ContentSlider.loadobjects(csexternalfiles) //Load external .js and .css files, if any
    var alldivs=slider.getElementsByTagName("div")
    for (var i=0; i<alldivs.length; i++){
    if (alldivs[i].className=="contentdiv"){
    slidernodes[sliderid].push(alldivs[i]) //add this DIV reference to array
    if (typeof alldivs[i].getAttribute("rel")=="string") //If get this DIV's content via Ajax (rel attr contains path to external page)
    ContentSlider.ajaxpage(alldivs[i].getAttribute("rel"), alldivs[i])
    }
    }
    ContentSlider.buildpagination(sliderid)
    var loadfirstcontent=true
    if (enablepersist && getCookie(sliderid)!=""){ //if enablepersist is true and cookie contains corresponding value for slider
    var cookieval=getCookie(sliderid).split(":") //process cookie value ([sliderid, int_pagenumber (div content to jump to)]
    if (document.getElementById(cookieval[0])!=null && typeof slidernodes[sliderid][cookieval[1]]!="undefined"){ //check cookie value for validity
    ContentSlider.turnpage(cookieval[0], parseInt(cookieval[1])) //restore content slider's last shown DIV
    loadfirstcontent=false
    }
    }
    if (loadfirstcontent==true) //if enablepersist is false, or cookie value doesn't contain valid value for some reason (ie: user modified the structure of the HTML)
    ContentSlider.turnpage(sliderid, 0) //Display first DIV within slider
    if (typeof autorun=="number" && autorun>0) //if autorun parameter (int_miliseconds) is defined, fire auto run sequence
    window[sliderid+"timer"]=setTimeout(function(){ContentSlider.autoturnpage(sliderid, autorun)}, autorun)
    }

    ContentSlider.buildpagination=function(sliderid){
    var slider=document.getElementById(sliderid)
    var paginatediv=document.getElementById("paginate-"+sliderid) //reference corresponding pagination DIV for slider
    var pcontent="<div>"
    for (var i=0; i<slidernodes[sliderid].length; i++) //For each DIV within slider, generate a pagination link
    pcontent+='<a href="#" onClick=\"ContentSlider.turnpage(\''+sliderid+'\', '+i+'); return false\">'+(slider.paginateText? slider.paginateText[i].replace("<br />", "") : i+1)+'</a> ' + (slider.paginateText && /<br/i.test(slider.paginateText[i])? "</div><div style='margin-top: 3px'>" : "")
    pcontent+='<a href="#" style="font-weight: bold;" onClick=\"ContentSlider.turnpage(\''+sliderid+'\', parseInt(this.getAttribute(\'rel\'))); return false\">'+(slider.nextText || "Next")+'</a>'
    paginatediv.innerHTML=pcontent
    paginatediv.onclick=function(){ //cancel auto run sequence (if defined) when user clicks on pagination DIV
    if (typeof window[sliderid+"timer"]!="undefined")
    clearTimeout(window[sliderid+"timer"])
    }
    }

    ContentSlider.turnpage=function(sliderid, thepage){
    var paginatelinks=document.getElementById("paginate-"+sliderid).getElementsByTagName("a") //gather pagination links
    for (var i=0; i<slidernodes[sliderid].length; i++){ //For each DIV within slider
    paginatelinks[i].className="" //empty corresponding pagination link's class name
    slidernodes[sliderid][i].style.display="none" //hide DIV
    }
    paginatelinks[thepage].className="selected" //for selected DIV, set corresponding pagination link's class name
    slidernodes[sliderid][thepage].style.display="block" //show selected DIV
    //Set "Next" pagination link's (last link within pagination DIV) "rel" attribute to the next DIV number to show
    paginatelinks[paginatelinks.length-1].setAttribute("rel", thenextpage=(thepage<paginatelinks.length-2)? thepage+1 : 0)
    if (enablepersist)
    setCookie(sliderid, sliderid+":"+thepage)
    }

    ContentSlider.autoturnpage=function(sliderid, autorunperiod){
    var paginatelinks=document.getElementById("paginate-"+sliderid).getElementsByTagName("a") //Get pagination links
    var nextpagenumber=parseInt(paginatelinks[paginatelinks.length-1].getAttribute("rel")) //Get page number of next DIV to show
    ContentSlider.turnpage(sliderid, nextpagenumber) //Show that DIV
    window[sliderid+"timer"]=setTimeout(function(){ContentSlider.autoturnpage(sliderid, autorunperiod)}, autorunperiod)
    }

    function getCookie(Name){
    var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair
    if (document.cookie.match(re)) //if cookie found
    return document.cookie.match(re)[0].split("=")[1] //return its value
    return ""
    }

    function setCookie(name, value){
    document.cookie = name+"="+value
    }

    ////////////////Ajax Related functions //////////////////////////////////

    ContentSlider.ajaxpage=function(url, thediv){
    var page_request = false
    var bustcacheparameter=""
    if (window.XMLHttpRequest) // if Mozilla, Safari etc
    page_request = new XMLHttpRequest()
    else if (window.ActiveXObject){ // if IE
    try {
    page_request = new ActiveXObject("Msxml2.XMLHTTP")
    }
    catch (e){
    try{
    page_request = new ActiveXObject("Microsoft.XMLHTTP")
    }
    catch (e){}
    }
    }
    else
    return false
    thediv.innerHTML=csloadstatustext
    page_request.onreadystatechange=function(){
    ContentSlider.loadpage(page_request, thediv)
    }
    if (csbustcachevar) //if bust caching of external page
    bustcacheparameter=(url.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
    page_request.open('GET', url+bustcacheparameter, true)
    page_request.send(null)
    }

    ContentSlider.loadpage=function(page_request, thediv){
    if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
    thediv.innerHTML=page_request.responseText
    }

    ContentSlider.loadobjects=function(externalfiles){ //function to load external .js and .css files. Parameter accepts a list of external files to load (array)
    for (var i=0; i<externalfiles.length; i++){
    var file=externalfiles[i]
    var fileref=""
    if (csloadedobjects.indexOf(file)==-1){ //Check to see if this object has not already been added to page before proceeding
    if (file.indexOf(".js")!=-1){ //If object is a js file
    fileref=document.createElement('script')
    fileref.setAttribute("type","text/javascript");
    fileref.setAttribute("src", file);
    }
    else if (file.indexOf(".css")!=-1){ //If object is a css file
    fileref=document.createElement("link")
    fileref.setAttribute("rel", "stylesheet");
    fileref.setAttribute("type", "text/css");
    fileref.setAttribute("href", file);
    }
    }
    if (fileref!=""){
    document.getElementsByTagName("head").item(0).appendChild(fileref)
    csloadedobjects+=file+" " //Remember this object as being already added to page
    }
    }
    }

  10. #10
    Join Date
    Aug 2004
    Posts
    10,140
    Thanks
    3
    Thanked 1,008 Times in 993 Posts
    Blog Entries
    16

    Default

    It works for me. I've attached the modified contentslider.js file.

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •