Autor Zpráva
Lokutus7323
Profil *
Dobrý den,
mám následující script pro funkci rolování textu velice podobného marquee v html ... vše funguje v pořádku s tím,že ale po načtení stránky texdt teprve "přijede onikud" z prava ..já bych ae potřeboval,aby text už po načtení stárnky byl najetý na stránce s tím,že by furt jezdil stejným směrem ...
ae v JS kódu nemůžu najíst místo, kde tuto hodnotu vytvořit případně nastavit,tak žádám o pomoc vás...

// Accessible Scroller by Mike Foskett (http://www.websemantics.co.uk/). Retain this message and you may use the code freely.

var speed=50        // speed of scroller
var step=3          // smoothness of movement
var top="#top"      // name of anchor used as page top when clicking start / stop / show
var Start= "Start"  // Text for start link
var Stop = "Stop"   // Text for stop link
var Show = "Show"   // Text for show link

var x, scroll, divW, sText=""

function onclickIE(idAttr,handler,call){
  if ((document.all)&&(document.getElementById)){idAttr[handler]=new Function(call)}
}

function addLink(id,call,txt){
  var e=document.createElement('A')
  e.setAttribute('href',top)
  e.setAttribute('onclick',call)
  var linktext=document.createTextNode(txt)
  e.appendChild(linktext)
  document.getElementById(id).appendChild(e)
}

function addControls(){
  addLink('controls','clickAction(0)',Stop)
  onclickIE(document.getElementById('controls').childNodes[0],"onclick",'clickAction(0)')
  document.getElementById('controls').appendChild(document.createTextNode(' | '))
  addLink('controls','clickAction(2)',Show)
  onclickIE(document.getElementById('controls').childNodes[2],"onclick",'clickAction(2)')
}

function stopScroller(){clearTimeout(scroll)}

function setAction(node,callvalue,txt){
  var c=document.getElementById('controls')
  c.childNodes[node].setAttribute('onclick','clickAction('+callvalue+')')
  onclickIE(document.getElementById('controls').childNodes[node],"onclick",'clickAction('+callvalue+')')
  c.childNodes[node].firstChild.nodeValue=txt
}

function clickAction(no){
  switch(no) {
    case 0:
      stopScroller()
      setAction(50,51,Start)
      setAction(2,2,Show)
      break
    case 1:
      startScroller()
      setAction(0,0,Stop)
      setAction(2,2,Show)
      break
    case 2:
      stopScroller()
      setAction(0,1,Start)
      setAction(2,3,Start)
      x=0
      document.getElementById('tag').style.whiteSpace='normal'
      document.getElementById('tag').style.left='-25px'
      break
    case 3:
      startScroller()
      setAction(0,0,Stop)
      setAction(2,2,Show)
      x=divW
      document.getElementById('tag').style.left=x+'px'
  }
}

function startScroller(){
  document.getElementById('tag').style.whiteSpace='nowrap'
  var p=document.createElement('P')
  p.id='testP'
  p.style.fontSize='25%' //fix for mozilla. multiply by 4 before using
  x-=step
  if (document.getElementById('tag').className) p.className=document.getElementById('tag').className
    p.appendChild(document.createTextNode(sText))
  document.body.appendChild(p)
  pw=p.offsetWidth
  document.body.removeChild(p)
  if (x<(pw*1)*-1){x=divW}
  document.getElementById('tag').style.left=x+'px'
  scroll=setTimeout('startScroller()',speed)
}

function initScroller(){
  if (document.getElementById && document.createElement && document.body.appendChild) {
    addControls()
    document.getElementById('controls').style.display='block'
    divW=document.getElementById('scroller').offsetWidth
    x=divW
    document.getElementById('tag').style.position='relative'
    document.getElementById('tag').style.left=divW+'px'
    var ss=document.getElementById('tag').childNodes
    for (i=0;i<ss.length;i++) {sText+=ss[i].nodeValue+" "}
    scroll=setTimeout('startScroller()',speed)
  }
}

function addLoadEvent(func) {
  if (!document.getElementById | !document.getElementsByTagName) return
  var oldonload = window.onload
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload()
      func()
    }
  }
}

addLoadEvent(initScroller)


Děkuji
fajzen
Profil
Nie som si úplne istý, je to dosť rozsiahly kód a bez HTML si to neviem odskúšať (išlo by to uhádnuť z toho kódu, ale to sa mi nechce :) ), ale myslím, že by stačilo zmeniť riadok 92:
x=divW

toto číslo predstavuje aktuálny CSS atribút left- vzdialenosť od ľavého okraja a na začiatku je nastavené na šírku elementu scroller, takže je hneď za ním

treba ho zmeniť buď na nejaké konkrétne číslo
x=300

alebo toto číslo nejak vypočítať, napr:
x=eval(document.getElementById('scroller').offsetWidth)/2 - eval(document.getElementById('tag').offsetWidth)/2;

(týmto kódom si nie som úplne istý, ale ako som už písal, nemám to ako ľahko otestovať...)

EDIT:
treba potom zmeniť aj riadok 94:
document.getElementById('tag').style.left=divW+'px'

na
document.getElementById('tag').style.left=x+'px'
Chamurappi
Profil
Reaguji na fajzen:
To už je poněkolikáté, co tě vidím používat zlo jménem eval, navíc zcela zbytečně. Proč se ho neštítíš?
fajzen
Profil
Chamurappi
neviem o tom, že by eval bolo zlo, ale rád sa nechám poučiť
v tomto prípade to možno zbytočné je, ale nebol som si istý a ublížiť to nemôže (asi)
_es
Profil
fajzenneviem o tom, že by eval bolo zlo, ale rád sa nechám poučiť
http://zdrojak.root.cz/clanky/javascript-vykonnostne-neprijemne-konstrukce/

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: