We take a look at two frameworks for programmatically creating slideshows, Reveal.js and Eagle.js, and see how they stack up.
Join the DZone community and get the full member experience.Join For Free
Jumpstart your Angular applications with Indigo.Design, a unified platform for visual design, UX prototyping, code generation, and app development.
As I wrote before, at Faveeo, we are working hard to produce original content from curated articles. One idea the team had, is to produce videos from written articles, to maximize the reader engagement and produce fresh, easy to understand materials.
I had to explore solutions to programmatically produce videos and one solution I came up with, is to build attractive slideshows. The slideshows have to be attractive enough to intrigue the reader and give them the impression that they are watching a video.
With the team, we explored several solutions:
- Generate slideshows using JS and record them.
- Build programmatically videos using
- Explore available SaaS platforms to program our videos.
- Generate an Adobe Premiere compatible format.
Long story short, all solutions turned out to be a nightmare except for the first one.
I have been using two frameworks to build my slideshows and I retained Eagle.js
This article is not a tutorial, therefore, here is my feedback concerning my use case.
Oh So Many Examples
Well, Reveal.js is quite popular and it's easy to find many examples on the web.
WTF: How Do We Start?
I've had this reaction while using Reveal.js for the first time, until I understand that I had to clone a git project to create my first template. The second issue I had was that I couldn't find the code, until I discover that a single HTML page contains all the code for the slide show.
Plenty of Features and Great Documentation
Yes, Reveal.js has an impressive set of features, autoplay, record, audio, etc. etc., and it's perfect for most.
The documentation is also great and you will find plenty of examples.
Drawback of the Solution
Reveal.js has a few draw backs:
- It's pure, vanilla JS and while I have been able to make it friendly with Vue.js, it has always been very hacky.
- I could not trigger text animations when a slide appeared.
- I had to restart the component after my new slides have been generated because I don't have control on Reveal.js lifecycle.Slideshow code using Reveal.js
Reveal.js comes with a rather clever system to position your slide items properly and compute their size.
However, it's a pure nightmare if you want to produce an absolute design for your slides, i.e. an element at the bottom, a picture in the left upper corner, etc.
I have been struggling a lot to get my first video prototype with the CSS choices that come with Reveal.js and the way we can customize a template.
Eagle.js is a rather recent JS framework powered by Vue.js, thus allowing the developer to write slides as Vue components.
I have been interested in this framework since it allows for the native integration of my slides with Vue and a, probably easier, automatic generation.
Here is my feedback about Eagle.js.
I have been a big supporter of Vue.js and to use a library based on it made things really easy. I ported the Reveal.js slideshow to Eagle.js in a few hours.
Yes, the documentation is poor, even if Zulko has provided several great examples. But all the logic and the dirty things are hidden in the code. The good news? There are only two small code files.
The components are de facto, but a huge set of features are missing, such as auto play.
The framework comes with a theme but everything can be easily overridden.
Easy to Extend
I have extended the framework to allow me some tweaks and design choices (https://github.com/faveeo/eagle.js).
I have retained Eagle.js. Though the framework has fewer features and a poorer documentation, the ease with which we can extend either the design or the features allowed me to create better slideshows and videos.
Published at DZone with permission of Sylvain Leroy . See the original article here.
Opinions expressed by DZone contributors are their own.