gpt4 book ai didi

binding - 当图像src绑定(bind)更改时, knockout js淡入淡出转换绑定(bind)处理程序

转载 作者:行者123 更新时间:2023-12-04 04:53:09 28 4
gpt4 key购买 nike

如果我有以下简单的 js/knockout 代码:

.js( View 模型):

var image = ko.observable('http://placehold.it/300x150');

看法:
<img data-bind={attr: {src: image}} />

如何创建一个 ko 绑定(bind)处理程序,该处理程序将在图像属性更改时执行简单的淡入淡出?

最佳答案

我认为最好的解决方案是创建另一个图像并将其淡入。

这是一个简单的绑定(bind)处理程序,它将在每次更新源可观察对象时在绑定(bind)元素内创建一个新图像(或在本例中为带有背景图像的 div),并使用 CSS3 动画淡化到它:

ko.bindingHandlers.transitionImage = {
init: function (element, valueAccessor) {
// create a holder for the images
var holder = document.createElement('div');
holder.style['position'] = 'relative';
holder.style['height'] = '100%';
holder.style['width'] = '100%';
element.appendChild(holder);

// create initial image
var url = ko.utils.unwrapObservable(valueAccessor());
var fore = document.createElement('div');
fore.style['background-image'] = 'url(' + url + ')';
fore.style['position'] = 'absolute';
fore.style['height'] = '100%';
fore.style['width'] = '100%';
fore.style['background-size'] = '100% 100%'
holder.appendChild(fore);
},
update: function (element, valueAccessor) {
var url = ko.utils.unwrapObservable(valueAccessor());

// retrieve the holder element
var holder = element.childNodes[0];

// create new image to transition to
var fore = document.createElement('div');
fore.className = 'transition';
fore.style['background-image'] = 'url(' + url + ')';
fore.style['position'] = 'absolute';
fore.style['height'] = '100%';
fore.style['width'] = '100%';
fore.style['background-size'] = '100% 100%'
fore.style['opacity'] = '0'; // ensure it is hidden
holder.appendChild(fore);

// CSS3 animate opacity
setTimeout(function () {
fore.style['opacity'] = '1';
}, 0);

// dispose of unnecessary hidden images eventually
setTimeout(function () {
var toRemove = holder.childNodes[0];
var removed = holder.removeChild(toRemove);
delete removed;
}, 10000);
}
};

它需要一些 css 来使不透明度获得动画效果:
div.transition {
-webkit-transition: opacity 0.5s linear;
-moz-transition: opacity 0.5s linear;
-o-transition: opacity 0.5s linear;
transition: opacity 0.5s linear;
}

要使用,请将其绑定(bind)到 div 容器:
<div data-bind="transitionImage: image" style="width: 100px; height: 100px"></div>

这种方法的优点是很容易用css来替换更复杂的动画,比如滑动。

Here is a fiddle for it!

关于binding - 当图像src绑定(bind)更改时, knockout js淡入淡出转换绑定(bind)处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17121458/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com