Skip to content

Instantly share code, notes, and snippets.

@pomber
Created February 22, 2013 20:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pomber/5016501 to your computer and use it in GitHub Desktop.
Save pomber/5016501 to your computer and use it in GitHub Desktop.
knockout animation on class change
var classesWrittenByBindingKey = '__ko__cssValue';
ko.bindingHandlers.animatedCss = {
'update': function (element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
if (typeof value == "object") {
var currentClassList = element.className.split(/\s+/);
var removeClassList = [];
var addClassList = [];
for (var className in value) {
var shouldHaveClass = ko.utils.unwrapObservable(value[className]);
var haveClass = $.inArray(className, currentClassList) > 0;
if (haveClass && !shouldHaveClass) {
removeClassList.push(className);
} else if (!haveClass && shouldHaveClass) {
addClassList.push(className);
}
}
var removeClasses = removeClassList.join(" ");
var addClasses = addClassList.join(" ");
$(element).switchClass(removeClasses, addClasses, 1000);
} else {
value = String(value || ''); // Make sure we don't try to store or set a non-string value
ko.utils.toggleDomNodeCssClass(element, element[classesWrittenByBindingKey], false);
element[classesWrittenByBindingKey] = value;
ko.utils.toggleDomNodeCssClass(element, value, true);
}
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment