【问题标题】:Animating knockout template views动画剔除模板视图
【发布时间】:2014-07-28 19:14:51
【问题描述】:

在使用敲除更改模板时,有没有办法在“页面”更改之间设置过渡动画?我正在寻找类似于Knockback-Navigators 的东西。我想不出办法做到这一点?有没有可以让这更容易的包?这是一个JSFiddle,与我的项目使用的绑定类型相同。还有我的 javascript 示例:

var View = function (title, templateName, data) {
var self = this;
this.title = title;
this.templateName = templateName;
this.data = data;
this.url = ko.observable('#' + templateName);
};
var test1View = {
    test: ko.observable("TEST1")
};
var test2View = {
    test: ko.observable("TEST2")
};

var viewModel = {
views: ko.observableArray([
    new View("Test 1", "test1", test1View),
    new View("Test 2", "test2", test2View)]),
    selectedView: ko.observable(),
}
//Apply knockout bindings
ko.applyBindings(viewModel);

//Set up sammy url routes
Sammy(function () {
    //Handles only groups basically
    this.get('#:view', function () {
        var viewName = this.params.view;
        var tempViewObj = ko.utils.arrayFirst(viewModel.views(), function (item) {
            return item.templateName === viewName;

        });
        //set selectedView
        viewModel.selectedView(tempViewObj);
    });
}).run('#test1');

【问题讨论】:

    标签: javascript jquery animation knockout.js sammy.js


    【解决方案1】:

    有很多方法可以做到这一点,这里有一个

    ko.bindingHandlers.withFade = {    
        init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
            var $element = $(element);
            var observable = valueAccessor();
            var wrapper = ko.observable(observable());
    
            observable.subscribe(function(value) {
                var current = wrapper();
                fadeIn = function() {
                    wrapper(value);
                    $element.fadeIn();
                };
    
                if(current) {
                    $element.fadeOut(fadeIn);
                } else {
                    $element.hide();
                    fadeIn();
                }
            });
    
            ko.applyBindingsToNode(element, { with: wrapper }, bindingContext);
    
            return { controlsDescendantBindings: true };
        }
    };
    

    http://jsfiddle.net/7E84t/19/

    你可以像这样抽象效果

    ko.transitions = {
        fade: {
            out: function(element, callback) {
                element.fadeOut(callback);
            },
            in: function(element) {
                element.fadeIn();
            }
        },
        slide: {
            out: function(element, callback) {
                element.slideUp(callback);
            },
            in: function(element) {
                element.slideDown();
            }
        }
    };
    

    html

    <div data-bind="withFade: { data: selectedView, transition: ko.transitions.slide }">
    

    http://jsfiddle.net/7E84t/23/

    【讨论】:

    • 嗯,您可能也想在其中添加一些处理逻辑,jsfiddle.net/7E84t/20
    • 太好了,这就是我想要的,我将尝试使用滑动动画,但这是一个很好的开始!
    • 我会将fadeIn、fadeOut的东西抽象成某种过渡类型,并使用jsfiddle.net/7E84t/22之类的绑定选项对其进行sepcify
    猜你喜欢
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 2017-05-22
    • 2013-11-26
    • 2013-01-08
    • 2020-04-10
    相关资源
    最近更新 更多