Avatar billede /krag Nybegynder
09. februar 2003 - 12:48 Der er 26 kommentarer og
1 løsning

Hjælp med kode til scroller!

Hey

Prøv at gå ind på www.toybomb.dk og kig på scrolleren (den med de 2 sorte pile)! Mit problem er, at jeg utroligt gerne vil ha` noget lignende, men ikke kan finde koden! Kan i hjælpe mig?
Avatar billede schaefner Juniormester
09. februar 2003 - 12:49 #1
Avatar billede schaefner Juniormester
09. februar 2003 - 12:50 #2
Nej, det var vidst ikke helt det du søgte
Avatar billede pelkjaer Nybegynder
09. februar 2003 - 12:51 #3
Avatar billede ahv Nybegynder
09. februar 2003 - 12:51 #4
Jeg har et eksempel hvor du skal holde knappen nede for at den scroller, er du interesseret i den eller?
Avatar billede /krag Nybegynder
09. februar 2003 - 12:52 #5
Nej, den side har jeg fået anbefalet, men der var ikke noget som kunne hjælpe mig! Andre???
Avatar billede /krag Nybegynder
09. februar 2003 - 12:53 #6
ahy, du må meget gerne sende, så kan jeg se om det er noget!
Avatar billede ffn Nybegynder
09. februar 2003 - 12:54 #7
<html>

<head>

<title>|t|o|y|b|o|m|b|</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<style type="text/css">

a {font-family:verdana,arial,helvetica,sans-serif; font-size:10px; color:#666666; text-decoration:underline;}

a:hover {text-decoration:underline; color:#000000;}

body {background-color:#FF9900; color:#CCCCCC; font-size:10px; font-family:verdana,arial,helvetica,sans-serif; line-height:12px;}



#divUpControl{position:absolute; width:80; left:10; top:10; z-index:1; text-align: right}

#divDownControl{position:absolute; width:80; left:10; top:270; z-index:1; text-align: right}

#divContainer{position:absolute; width:80; height:240; overflow:hidden; top:30; left:10; clip:rect(0,320,240,0); visibility:hidden}

#divContent{position:absolute; top:0; left:0}

</style>

<script language="JavaScript">

<!--





/*

All design by Martin Rasmussen

*/



<!--

// begin absolutely positioned scrollable area object scripts

function verifyCompatibleBrowser(){

    this.ver=navigator.appVersion

    this.dom=document.getElementById?1:0

    this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom)?1:0;

    this.ie4=(document.all && !this.dom)?1:0;

    this.ns5=(this.dom && parseInt(this.ver) >= 5) ?1:0;



    this.ns4=(document.layers && !this.dom)?1:0;

    this.bw=(this.ie5 || this.ie4 || this.ns4 || this.ns5)

    return this

}

bw=new verifyCompatibleBrowser()





var speed=50



var loop, timer



function ConstructObject(obj,nest){

    nest=(!nest) ? '':'document.'+nest+'.'

    this.el=bw.dom?document.getElementById(obj):bw.ie4?document.all[obj]:bw.ns4?eval(nest+'document.'+obj):0;

    this.css=bw.dom?document.getElementById(obj).style:bw.ie4?document.all[obj].style:bw.ns4?eval(nest+'document.'+obj):0;

    this.scrollHeight=bw.ns4?this.css.document.height:this.el.offsetHeight

    this.clipHeight=bw.ns4?this.css.clip.height:this.el.offsetHeight

    this.up=MoveAreaUp;this.down=MoveAreaDown;

    this.MoveArea=MoveArea; this.x; this.y;

    this.obj = obj + "Object"

    eval(this.obj + "=this")

    return this

}

function MoveArea(x,y){

    this.x=x;this.y=y

    this.css.left=this.x

    this.css.top=this.y

}



function MoveAreaDown(move){

    if(this.y>-this.scrollHeight+objContainer.clipHeight){

    this.MoveArea(0,this.y-move)

    if(loop) setTimeout(this.obj+".down("+move+")",speed)

    }

}

function MoveAreaUp(move){

    if(this.y<0){

    this.MoveArea(0,this.y-move)

    if(loop) setTimeout(this.obj+".up("+move+")",speed)

    }

}



function PerformScroll(speed){

    if(initialised){

        loop=true;

        if(speed>0) objScroller.down(speed)

        else objScroller.up(speed)

    }

}



function CeaseScroll(){

    loop=false

    if(timer) clearTimeout(timer)

}

var initialised;

function InitialiseScrollableArea(){

    objContainer=new ConstructObject('divContainer')

    objScroller=new ConstructObject('divContent','divContainer')

    objScroller.MoveArea(0,0)

    objContainer.css.visibility='visible'

    initialised=true;

}

// end absolutely positioned scrollable area object scripts



//-->//-->

</script>

<SCRIPT language=JavaScript>

<!--

function NewWindow(mypage, myname, h, w, t, l, image_name) {

winprops = 'height='+h+',width='+w+',top='+t+',left='+l 

win = window.open(mypage, myname ,winprops)

}

// -->

</SCRIPT>

<script language="JavaScript">

<!--











function NewWindow(mypage, myname, h, w, t, l, image_name) {

winprops = 'height='+h+',width='+w+',top='+t+',left='+l 

win = window.open(mypage, myname ,winprops)

}

// -->

<!--

// begin absolutely positioned scrollable area object scripts

function verifyCompatibleBrowser(){

    this.ver=navigator.appVersion

    this.dom=document.getElementById?1:0

    this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom)?1:0;

    this.ie4=(document.all && !this.dom)?1:0;

    this.ns5=(this.dom && parseInt(this.ver) >= 5) ?1:0;



    this.ns4=(document.layers && !this.dom)?1:0;

    this.bw=(this.ie5 || this.ie4 || this.ns4 || this.ns5)

    return this

}

bw=new verifyCompatibleBrowser()





var speed=50



var loop, timer



function ConstructObject(obj,nest){

    nest=(!nest) ? '':'document.'+nest+'.'

    this.el=bw.dom?document.getElementById(obj):bw.ie4?document.all[obj]:bw.ns4?eval(nest+'document.'+obj):0;

    this.css=bw.dom?document.getElementById(obj).style:bw.ie4?document.all[obj].style:bw.ns4?eval(nest+'document.'+obj):0;

    this.scrollHeight=bw.ns4?this.css.document.height:this.el.offsetHeight

    this.clipHeight=bw.ns4?this.css.clip.height:this.el.offsetHeight

    this.up=MoveAreaUp;this.down=MoveAreaDown;

    this.MoveArea=MoveArea; this.x; this.y;

    this.obj = obj + "Object"

    eval(this.obj + "=this")

    return this

}

function MoveArea(x,y){

    this.x=x;this.y=y

    this.css.left=this.x

    this.css.top=this.y

}



function MoveAreaDown(move){

    if(this.y>-this.scrollHeight+objContainer.clipHeight){

    this.MoveArea(0,this.y-move)

    if(loop) setTimeout(this.obj+".down("+move+")",speed)

    }

}

function MoveAreaUp(move){

    if(this.y<0){

    this.MoveArea(0,this.y-move)

    if(loop) setTimeout(this.obj+".up("+move+")",speed)

    }

}



function PerformScroll(speed){

    if(initialised){

        loop=true;

        if(speed>0) objScroller.down(speed)

        else objScroller.up(speed)

    }

}



function CeaseScroll(){

    loop=false

    if(timer) clearTimeout(timer)

}

var initialised;

function InitialiseScrollableArea(){

    objContainer=new ConstructObject('divContainer')

    objScroller=new ConstructObject('divContent','divContainer')

    objScroller.MoveArea(0,0)

    objContainer.css.visibility='visible'

    initialised=true;

}

// end absolutely positioned scrollable area object scripts

//-->

</script>

<script language="JavaScript">

<!--

<!--

function MM_reloadPage(init) {  //reloads the window if Nav4 resized

  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {

    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}

  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();

}

MM_reloadPage(true);

// -->



function MM_preloadImages() { //v3.0

  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();

    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)

    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}

}



function MM_findObj(n, d) { //v4.0

  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {

    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}

  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];

  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);

  if(!x && document.getElementById) x=document.getElementById(n); return x;

}



function MM_nbGroup(event, grpName) { //v3.0

  var i,img,nbArr,args=MM_nbGroup.arguments;

  if (event == "init" && args.length > 2) {

    if ((img = MM_findObj(args[2])) != null && !img.MM_init) {

      img.MM_init = true; img.MM_up = args[3]; img.MM_dn = img.src;

      if ((nbArr = document[grpName]) == null) nbArr = document[grpName] = new Array();

      nbArr[nbArr.length] = img;

      for (i=4; i < args.length-1; i+=2) if ((img = MM_findObj(args[i])) != null) {

        if (!img.MM_up) img.MM_up = img.src;

        img.src = img.MM_dn = args[i+1];

        nbArr[nbArr.length] = img;

    } }

  } else if (event == "over") {

    document.MM_nbOver = nbArr = new Array();

    for (i=1; i < args.length-1; i+=3) if ((img = MM_findObj(args[i])) != null) {

      if (!img.MM_up) img.MM_up = img.src;

      img.src = (img.MM_dn && args[i+2]) ? args[i+2] : args[i+1];

      nbArr[nbArr.length] = img;

    }

  } else if (event == "out" ) {

    for (i=0; i < document.MM_nbOver.length; i++) {

      img = document.MM_nbOver[i]; img.src = (img.MM_dn) ? img.MM_dn : img.MM_up; }

  } else if (event == "down") {

    if ((nbArr = document[grpName]) != null)

      for (i=0; i < nbArr.length; i++) { img=nbArr[i]; img.src = img.MM_up; img.MM_dn = 0; }

    document[grpName] = nbArr = new Array();

    for (i=2; i < args.length-1; i+=2) if ((img = MM_findObj(args[i])) != null) {

      if (!img.MM_up) img.MM_up = img.src;

      img.src = img.MM_dn = args[i+1];

      nbArr[nbArr.length] = img;

  } }

}

//-->

</script>

</head>

<body bgcolor="#FF9900" onLoad="InitialiseScrollableArea();MM_preloadImages('Pictures/news.gif','Pictures/newsroll.gif','Pictures/newspic.jpg','Pictures/startpic.jpg','Pictures/shows.gif','Pictures/showsroll.gif','Pictures/showspic.jpg','Pictures/sound.gif','Pictures/soundroll.gif','Pictures/soundpic.jpg','Pictures/disco.gif','Pictures/discoroll.gif','Pictures/discopic.jpg','Pictures/lineup.gif','Pictures/lineuproll.gif','Pictures/lineuppic.jpg','Pictures/photos.gif','Pictures/photosroll.gif','Pictures/photospic.jpg','Pictures/guestbookroll.gif','Pictures/guests.gif','Pictures/guestspic.jpg','Pictures/contact.gif','Pictures/contactroll%27.gif','Pictures/contactpic.jpg','Pictures/links.gif','Pictures/linksroll.gif','Pictures/linkspic.jpg')" text="#000000" link="#999999" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" vlink="#999999" alink="#999999">

<table cellspacing="0" cellpadding="0" border="0" height="100%" width="433" bgcolor="#FFFFFF">

  <tr background="Pictures/white.gif">

    <td width="383" height="441" valign="top">

      <table width="100%" border="0" cellpadding="0" cellspacing="0" height="243">

        <tr>

          <td width="44" height="378">

          </td>

           

        </tr>

      </table>

      <!-- begin absolutely positioned scrollable area object-->

      <div id="divUpControl" style="width: 10px; height: 10px; left: 347px; top: 240px; visibility: visible">

        <a href="java script:;" onMouseOver="PerformScroll(-6)" onMouseOut="CeaseScroll()"><img width="20" height="20" border="0" src="Pictures/scrollup.gif"></a>

      </div>

      <div id="divDownControl" style="width: 1px; height: 8px; left: 347px; top: 398px; visibility: visible">

        <a href="java script:;" onMouseOver="PerformScroll(6)" onMouseOut="CeaseScroll()"><img src="Pictures/scrolldown.gif" width="20" height="20" border="0"></a>

      </div>

      <div id="divContainer" style="width: 300px; height: 170px; left: 37px; top: 243px; clip: rect(0 300 219 0); visibility: visible; overflow: hidden">

        <div id="divContent" style="">  <p><b><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000">Janua</font></b><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000"><b>ry

            31st: Hey folks. Starting to worry??! Don't. We are still
around but have done absolutely nothing over the last
month.......But we better get going again.<p> We have
some shows planned throughout the spring. Go <a href="shows.htm">here</a> for
the stats!

Also we are in the early stages of planning our european
summertour. This year it will be an all Danish
experience starring ouselves, offcourse, and <a href="http://www.gobsquad.dk" target="_blank">Gob Squad</a>. <p>

Thats all. But don't forget that toybomb people will be
available soon in Holland and Belgium. Go
<a href="http://www.the20belows.dk" target="_blank">here</a> for more info.

            <i>-toybomb</i><br><p>
                        <p>


          <p><b><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000">Decem</font></b><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000"><b>ber

            11th: </b>The last <a href="shows.htm">show</a> of the year is announced.

            It will take place in our home town, Svendborg in DK on Dec. 28th

            at Harmonien. Don't miss the chance to pop-punk the night away. Also

            Starring <a href="http://www.rabalder.subnet.dk/peachykeens.htm" target="_blank">The

            Peachy Keens</a>, and <a href="http://punked.dk/carpediem/" target="_blank">Carpe

            Diem</a>. For more exciting news on the toybomb people go <a href="http://www.the20belows.dk" target="_blank">here</a>...

            Have a nice December!<br>

            <i>toybomb</i><br>

            </font></p>

          <p><b><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000">Novem</font></b><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000"><b>ber

            27th: </b>This band is not the fastest working on the planet - we

            know. But we have finally managed to update the <a href="photos.htm">photo</a>-section

            with a few pictures from our summer-tour of Europe...</font></p>

          <p><b><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000">Novem</font></b><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000"><b>ber

            4th: </b>The Saturday show at <a href="http://www.1000fryd.dk" target="_blank">1000fryd</a>

            will also se the likes of <a href="http://www.fajabefa.dk/band/thepeachykeens" target="_blank">The

            Peachy Keens</a>, <a href="http://www.agent-orange.subnet.dk" target="_blank">An

            Orange</a> and <a href="http://noiseweb.com/vialka" target="_blank">Vialka</a>.

            Hope to see YOU there.</font><br>

          </p>

          <p><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000"><b>October

            29th: </b>Back from Belgium. Fantastic again!!!! Our biggest of thanks

            to <a href="http://www.not-again.net" target="_blank">Not Again</a>,

            JH De Zool, Pieter and everyone at <a href="http://go.to/minirock" target="_blank">Minirock</a>.</font></p>

          <p><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000"><b>October

            22nd: </b>Hello again. This is a very exciting week for us. We will

            be playing Friday and Saturday in Belgium and no need to say we are

            very pleased to go back there. We cant wait to meet the great Belgian

            crowd again and surely saturday at <a href="http://go.to/minirock" target="_blank">Minirock</a>

            will be a blast. Also appearing will be <a href="http://www.travoltas.com" target="_blank">The

            Travoltas</a> + more and off course good buddies <a href="http://www.not-again.net" target="_blank">Not

            Again</a>. See Ya!!!!!!</font></p>

          <p><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000"><b>September

            15th: </b>New <a href="shows.htm">show</a> at Stengade 30, Copenhagen

            on Oct. 9th.</font></p>

          <p><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000"><b>September

            11th: </b>First of all: Sorry for taking so long but here is a short

            but indeed fresh update on the world of Toybomb. New <a href="shows.htm">shows</a>

            for this autumn confirmed. Check 'em out please.</font></p>

          <p>&nbsp;</p>

          </div>

      </div>

      <!-- end absolutely positioned scrollable area object -->

    </td>
  </tr>
</table>
</body>
</html>
Avatar billede ffn Nybegynder
09. februar 2003 - 12:56 #8
ups, det var ikke det der skulle have været i copy/past, men det er det du kan bruge, sorry mit svar blev sådan!!!
Avatar billede /krag Nybegynder
09. februar 2003 - 12:58 #9
Det er jo koden for HELE siden! Kan du give mig koden KUN for scrolleren?
Avatar billede pelkjaer Nybegynder
09. februar 2003 - 12:59 #10
Den kan absolut ikke anbefales da findObj ver. 4 er fyldt med bugs.
Der er faktisk en 4.01 updater der afhjælper dette.
Avatar billede /krag Nybegynder
09. februar 2003 - 13:00 #11
Nolge som har en kode?
Avatar billede ahv Nybegynder
09. februar 2003 - 13:00 #12
<html>

<head>

<script>
startad=0
function newsdown()
{
document.news.scrollBy(0,15)
texttimer = setTimeout("newsdown()",45)
startad=1
}
function newsup()
{
document.news.scrollBy(0,-15)
texttimer = setTimeout("newsup()",45)
startad=1
}
function newsquit()
{
if(startad==1)
{
clearTimeout(texttimer)
}
}
</script>

</head>

<body>

<A HREF="java script:void(0)" ONMOUSEDOWN="newsdown();return false" ONMOUSEOUT="newsquit()" ONMOUSEUP="newsquit()">NED</A><A HREF="java script:void(0)" ONMOUSEDOWN="newsup();return false" ONMOUSEOUT="newsquit()" ONMOUSEUP="newsquit()">OP</A></div>
<iframe height="216" width="198" src="fil.html" name="news" frameborder="0" scrolling="no"></iframe>

</body>
</html>


Det indhold som skal "scrolles", skal du ligge i en iframe, hvis du bare tager mit eksempel direkte, kommer du til at scrolle på en 404 side. For at scrolle dit eget indhold, skal du ændre fil.html til den fil hvor dit indhold ligger.
Avatar billede ahv Nybegynder
09. februar 2003 - 13:03 #13
Hvis du bare vil have den til at reagere når musen bliver ført over gøres det sådan her:

<html>

<head>

<script>
startad=0
function newsdown()
{
document.news.scrollBy(0,15)
texttimer = setTimeout("newsdown()",45)
startad=1
}
function newsup()
{
document.news.scrollBy(0,-15)
texttimer = setTimeout("newsup()",45)
startad=1
}
function newsquit()
{
if(startad==1)
{
clearTimeout(texttimer)
}
}
</script>

</head>

<body>

<A HREF="java script:void(0)" ONMOUSEOVER="newsdown();return false" ONMOUSEOUT="newsquit()" ONMOUSEUP="newsquit()">NED</A><A HREF="java script:void(0)" ONMOUSEOVER="newsup();return false" ONMOUSEOUT="newsquit()" ONMOUSEUP="newsquit()">OP</A></div>
<iframe height="216" width="198" src="fil.html" name="news" frameborder="0" scrolling="no"></iframe>

</body>
</html>
Avatar billede /krag Nybegynder
09. februar 2003 - 13:10 #14
ahy: kan du ikke lige komme på icq?
Avatar billede /krag Nybegynder
09. februar 2003 - 13:10 #15
Mit nr:178526846
Avatar billede backside Nybegynder
09. februar 2003 - 17:30 #16
/krag>> Husk at der ikke må gives point for noget der er løst uden for eksperten. ;)
Avatar billede olebole Juniormester
09. februar 2003 - 17:40 #17
<ole>

ahy >> Den kode, du viser, er jo til noget helt andet. Den kan du ikke bruge til det her  :)

/krag >> Prøv at kikke på disse to sider. De har det, du eferlyser:
  http://www.ghtml.com/showoff/scrollbar/index.html
  http://www20.brinkster.com/viewsrc/
Og så virher de bedre end toytomb.dk's  ;o)
/mvh
</bole>
Avatar billede ahv Nybegynder
09. februar 2003 - 17:45 #18
olebole:

Mit forslag løste ellers hans problem, det kan ses her:

www.ahv.ban.dk
Avatar billede olebole Juniormester
09. februar 2003 - 18:06 #19
Jamen, det er jo fint ... det var bare ikke, hvad han efterlyste  :)
/mvh
Avatar billede olebole Juniormester
09. februar 2003 - 18:10 #20
Dels var det en DHTML-scroller, han efterlyste - dels er det slamkode, du har pushet, der ikke har noget med nogen kodestandard at gøre ... virker kun i én browser. Vil du også løse hans nuværende problem for ham?
/mvh
Avatar billede /krag Nybegynder
09. februar 2003 - 18:39 #21
Jeg ved sgu ikke hva jeg efterlyste, for jeg har ikke en skid forstand på det! så, kan det ikke være ligemeget? JO!
Avatar billede olebole Juniormester
09. februar 2003 - 19:00 #22
Jeg forestillede mig bare, du ville have en kode, der var skrevet i de sprog, man benytter på nettet og derfor virker i andet end IE.
Da du ikke synes at være interesseret i kvalitet, men tager til takke med, hvad somhelst, undskylder jeg naturligvis  :)
/mvh
Avatar billede /krag Nybegynder
09. februar 2003 - 19:42 #23
Det her er ikke hvad som helst! Og da der ikke var andre som svarede (ja, hvorfor gjorde du egentlig ikke, Ole?) er jeg mere end tilfreds! Alexander har jeg gjort et skide godt stykke arbejde! Så drop det klynkeri..
Avatar billede olebole Juniormester
09. februar 2003 - 20:34 #24
Bassemand, det handler for mig ovehovedet ikke om grådighed ang. points. Her siger din kommentar mere om dig selv og din tankegang  ;o)
I har gjort et stykke arbejde, der har resulteret i et stykke slamkode - men da du stiller dig tilfreds med det, kan jeg jo kun trække undrende på skuldrende  :)
Hvem klynker ...?!?!!!
Avatar billede pelkjaer Nybegynder
09. februar 2003 - 20:39 #25
Bortset fra det linkede jeg 09/02-2003 12:51:23 til viewsrc :)
Avatar billede olebole Juniormester
09. februar 2003 - 20:55 #26
pelkjaer >> Valid kode afvises ... det er ikke, hvad der ønskes  ;o))
/mvh
Avatar billede pelkjaer Nybegynder
09. februar 2003 - 20:59 #27
det kan jeg læse =oD
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