Forum Discussion
Storyline360, Animation and GSAP ( Greensock )
Hi,
Trying to figure something out in SL360 i stumbled upon the ds-bootstrap.min.js file thats added to the lib/scripts folder when publishing a Storyline360 file. In that file are GSAP(Greensock) references... some samples../*!
* VERSION: 1.11.8
* DATE: 2014-05-13
* UPDATES AND DOCS AT: http://www.greensock.com
*
* @license Copyright (c) 2008-2014, GreenSock. All rights reserved.
* This work is subject to the terms at http://www.greensock.com/terms_of_use.html or for
* Club GreenSock members, the software agreement that was issued with your membership.
*
* @author: Jack Doyle, jack@greensock.com
*/
What i can find in that file that both GSAP CSS-plugin, easing and basic GSAP tweens are somehow used in Storyline.
Bad news however is that its a really old version they have implemented... from 2014... version 1.11.8, whereas the current GSAP version is version 3.5.1 !!!
Big advantages of the newer GSAP are mobile performance, speed and perfect control over SVG. So Storyline would certainly benefit from updating their internal used Storyline to the latest version.
As Storyline probably uses GSAP for all its animation features, the transitions and everything, i personally would really like it to have the control of GSAP in the hands of the frontend-user. I do use GSAP constantly in my elearning projects, but always have to add the newest version..
Is there an option to get the latest version of GSAP implemented in Storyline?
And can we have some better scripted control over Storyline elements...as you do use it already anyway?
Kind regards,
Math Notermans
- PhilMayor-b4ca0Community Member
Hey Math
Got lost on this
var player = GetPlayer();
const collection = document.getElementsByClassName("vector-text-item");
const textsArray = [];
let baseStr;
for(var i = 0; i < collection.length;i++){
var sStr = player.GetVar("debugStr");
var someStr = gsap.getProperty(collection[i], "textContent");
var someNewStr = sStr+"<BR>"+"i "+i+": "+someStr;
player.SetVar("debugStr",someNewStr);
textsArray.push(gsap.getProperty(collection[i], "textContent"));
}
console.log("someText: "+ someNewStr);That gives me all of the text in the course in the console, how do I get the text in just one shape?
I am missing something big I am sure.
- MathNotermans-9Community Member
2 Phil Mayors here? Which one is the real one ;-) Or is one Phil Minor ;-)
Basically its all in the code as is.
Here i set a variable.player.SetVar("debugStr",someNewStr);
So if you add an inline variable anywhere in your project...it will show the text.
But if you want a single value from a given element in your project...
Use this...var player = GetPlayer();
// collection will be a collection of ALL elements with text
const collection = document.getElementsByClassName("vector-text-item");
/*
Depending of the amount of your texts you need a specific one.
Storyline will count up from 0 till the top layer on top.
So depending on your Storyline this number will differ.
0 is the lowest layer.
collection[0] or collection[7] or whatever layer you need.*/
var someStr = gsap.getProperty(collection[0], "textContent");
player.SetVar("debugStr",someStr);
console.log("someText: "+ someStr);
- PhilMayor-b4ca0Community Member
Thanks Math there are two of me, the other one is the real one this is my other account for a specific company.
I was definitely missing something.
I need lots of these slides that are copies of one another with different text in, do the layers stay the same in each slide or do I need to find the correct layer on a slide by slide basis?
Sent from Outlook for iOS
This is a confidential email. Tesco may monitor and record all emails. The views expressed in this email are those of the sender and not Tesco. Tesco Stores Limited Company Number: 519500 Registered in England Registered Office: Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, AL7 1GA VAT Registration Number: GB 220 4302 31
- MathNotermans-9Community Member
So this is the solution you want ;-)
https://360.articulate.com/review/content/07c6804a-d8cd-4d8a-add0-a8535d3bcd24/review
If you can add a acc-name to the textfields you want the text from... then this is the code to use.var player = GetPlayer();
var myElement = document.querySelector("[data-acc-text='selectMe']");
var someStr = gsap.getProperty(myElement, "textContent");
player.SetVar("debugStr",someStr);
console.log("correct textfield is: "+someStr);
If however you cannot add an acc-name to that particular textfield... go for the solution on the last slide...'eightSlide'. I add a textfield with the text 'dummy' in it ( you can make it invisible ) and in the code check for that. Like this...var player = GetPlayer();
const collection = document.getElementsByClassName("vector-text-item");
for(var i = 0; i < collection.length;i++){
var someStr = gsap.getProperty(collection[i], "textContent");
if(someStr=="dummy"){
console.log("textfield above the one we need is: "+i+" and text is "+someStr);
var layerNum = i-1;
var correctStr = gsap.getProperty(collection[layerNum], "textContent");
console.log("text is: "+correctStr);
} else{
}
}
For your ease added the .story - PhilMayor-b4ca0Community Member
@Math thank you so much for this I have it working how I want now really appreciate this.
@Jurgen thanks for this I noticed the oddities yesterday, thank you.
- PhilMayor-b4ca0Community Member
@Math I also want to say a big thank you for all of the annotations and additional slides, over and above what I was hoping for, thanks :-)
- larryvanwave-ffCommunity Member
I have your code working for the SplitText - just wondering if there is a way to add in a break in the text, it would be awesome to control where the hard returns are. See file for example
- MathNotermans-9Community Member
Did check whether in some way you could use <BR> in the text but that didnot work.
However you can detect a specific character and add a br-element in the code when creating the HTML-text.
Showing here...
https://360.articulate.com/review/content/068eab8b-a19e-4852-96a2-5dca03bf9886/review
@Jurgen as you can see 'fi' has issues :-)
So how to do this ?
Split the text into an array.//creating a textArray and splitting on %
const textArr = textStr1.split("%");
Then create a linebreak.//creating a linebreak
const br = document.createElement("br");
Finally loop through your array and add an arrayentry ( so a line ) and then add a linebreak.for(var j = 0; j < textArr.length;j++){
textNode = document.createTextNode(textArr[j]);
h1.appendChild(textNode);
h1.appendChild(br);
}
Working sample shared.
- PhilMayorSuper Hero
Thanks Jurgen
- MathNotermans-9Community Member
For the SplitText and similar setups..i do think using a non-ligature Articulate font version for the original text field probably is the easiest solution. Good to keep in mind. Whenever you create HTML text with that content...it doesnot matter anyway as its no real Storyline text anymore.
- larryvanwave-ffCommunity Member
Math, I was wondering if I can ask to borrow your coding genius mind to help me figure out the screen size refresh code for this slide. It functions like I want on a desktop monitor, but when reduced down the scrolling panel percentages don't work correctly. Here is the example -
https://360.articulate.com/review/content/ce7573c7-fc10-42c8-961e-c0fd17576556/review
- MathNotermans-9Community Member
My first thought was that it was a Review issue, but testing and publishing purely as Web has the same results. Checking things out now.
Tweenlite you can exchange for gsap as thats included in Storyline now.
As you use a 'FromTo' tween for the scrollArea... easiest is using some static elements and then getProperty to get the exact values to move From and To... making that work in your sample.