The component that animates color attributes or any single value presentation attribute of a target element on most browsers.
Animate a wide variety of presetantion attributes of a target element.
The KUTE.js HTML Attributes component enables animation for any numeric presentation attribute, with or without a measurement unit / suffix as well as specific color attributes.
The component can be a great asset for creating complex animations in combination with the SVG components as we'll see in the following examples.
The component doesn't support attributes with multiple values like stroke-dasharray, viewBox or transform for specific reasons. To animate the stroke related attributes, the SVG Draw component is the tool for you, while for transform you have the SVG Transform component and the Transform Matrix component.
Despite the "limitations" of this component, you have access to just about any SVGElement or Element presentation attribute available.
// basic notation for unitless attributes
var myAttrTween = KUTE.to('selector', {attr: {attributeName: 75}});
// OR for attributes that are ALWAYS suffixed / have a measurement unit
var mySuffAttrTween = KUTE.to('selector', {attr:{attributeName: '15%'}});
The HTML Attributes component can handle all possible single value presentation attributes with both dashed string and camel-case notation. Let's have a look at a sample notation so you can get the idea:
// dashed attribute notation
var myDashedAttrStringTween = KUTE.to('selector', {attr: {'stroke-width': 75}});
// non-dashed attribute notation
var myNonDashedAttrStringTween = KUTE.to('selector', {attr:{strokeWidth: '15px'}});
The strokeWidth attribute is very interesting because it
can work with px, % or with no unit/suffix.
In this case, and in any context, the component will always work with
the attribute's current value suffix to eliminate any possible janky
animation.
The HTML Attributes component can also animate color
attributes: fill, stroke and stopColor. If the elements are affected by their CSS
counterparts, the effect is not visible, you need to make sure that
doesn't happen.
// some fill rgb, rgba, hex
var fillTween = KUTE.to('#element-to-fill', {attr: { fill: 'red' }});
// some stopColor or 'stop-color'
var stopColorTween = KUTE.to('#element-to-do-stop-color', {attr: {stopColor: 'rgb(0,66,99)'}});
If in this example the fill attribute value would
reference a gradient, then rgba(0,0,0,0) is used. Keep in mind
that the component will not work with combined fill values like url(#pattern) rgba(), you are better of only using the url(#pattern) and use other attributes to control directly the
animation of that linked pattern, just like in the last example below.
In the next example, let's play with the attributes of a <circle> element: radius and center coordinates.
// radius attribute
var radiusTween = KUTE.to('#circle', {attr: {r: 75}});
// coordinates of the circle center
var coordinatesTween = KUTE.to('#circle', {attr:{cx:0,cy:0}});
A quick demo with the above:
Similar to the example on circle attributes, we can also animate the
gradient positions but this time with a specific to gradients suffix,
and the component will make sure to always include the suffix for you,
as in this example the % unit is found in the current
value and used as unit for the DOM update:
// gradient positions to middle
var closingGradient = KUTE.to('#gradient', {attr: {x1:'49%', x2:'49%', y1:'49%', y2:'49%'}});
// gradient positions rotated
var rotatingGradient = KUTE.to('#gradient', {attr: {x1:'49%', x2:'51%', y1:'51%', y2:'51%'}});
fillOpacity becomes fill-opacity).