Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Ich denke, da würde man sich leichter tun, wenn man es einfach mit Canvas zeichnet.
Semantisch würde ich die Timeline als UL schreiben. Jedes Listelement besitzt im Hintergrund ein Blockelement mit background-color und im Vordergrund eines mit background-color und border-radius 99.
Weil ich die Aufgabe interessant finde, habe ich mal ein Demo mit jCanvas gemacht:
Code:<canvas id="timelinecv" style="border: 2px solid blue;"></canvas> <script> var timelinedata = [ { year: "1995", text: "1995 Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet." }, { year: "1995", text: "1995 Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet." }, { year: "1997", text: "1997 Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet." }, { year: "1999", text: "1999 Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet." }, { year: "2002", text: "2002 Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet." }, ]; var cv = $("#timelinecv"); var diameter = 10, strokewidth = 4, left = 10, itop = 10, yearleft = 30, yeartop = 0, yearsize = '20px', txtleft = 50, txttop = 20, txtwidth = 300, txtsize = '15px'; function drawit(cidx) { cv[0].height = 600; cv[0].width = 600; cv.clearCanvas(); cv.removeLayers(); var ctop = itop; timelinedata.forEach(function (item, idx) { var h = 50; cv.drawArc({ layer: true, fillStyle: 'black', x: left, y: ctop, radius: diameter / 2, start: 0, end: 360 }).drawText({ layer: true, click: function(layer) { drawit(idx); }, name: 'year' + idx, fillStyle: 'black', fontSize: yearsize, fontFamily: 'Arial', text: timelinedata[idx].year, x: left + yearleft, y: ctop + yeartop }); yend = ctop; if (idx == cidx) { cv.drawText({ layer: true, click: function (layer) { drawit(idx); }, name: 'text', fillStyle: 'black', fontSize: txtsize, fontFamily: 'Arial', align: 'left', text: timelinedata[idx].text, x: left + yearleft, y: ctop + txttop, maxWidth: txtwidth, fromCenter: false }); htxt = cv.measureText('text').height; ctop += h + htxt; } else { ctop += h; } }); cv.drawLine({ layer: true, strokeStyle: '#000', strokeWidth: strokewidth, x1: left, y1: itop, x2: left, y2: yend }); } drawit(-1); </script>
Hier eine Version mit vierfacher Auflösung. Funktioniert beim Zoomen sehr gut, aber mit einem HIDPI-Monitor konnte ich es nicht testen.
https://jsfiddle.net/5f7f6g71/2/
Leider auch nicht perfekt, weil jetzt in der Originalgröße die Qualität reduziert ist durch das Herunterskalieren. Vielleicht besser mit SVG.
window.devicePixelRatio
Hey, sorry dass ich einen relativ alten Post nochmal wiederbelebe, auch weil sich das Thema schon erledigt hat.
Doch ich hatte gerade nichts zu tun und habe deshalb an einer noch besseren Version gearbeitet, die komplett ohne Javscript funktioniert und auch das CSS alles für einen macht. Es muss also nur noch der html-Code bearbeitet werden, bzw. einfach ein neues Element für den Collabse eingefügt werden. Falls also ein späterer User nach sucht, hier meine Lösung:
https://jsfiddle.net/Aaron3219/vpx38948/1/
Achso... hier:Klick auf die Jahreszahl öffnet Details.