당신이 with
같은 바인딩을 사용하여 가상 요소를 활용한다 사용할 수있는 간단한 트릭 :
HTML :
<!-- ko with: title -->
<h2 data-bind="text: $data"></h2>
<!-- /ko -->
<!-- ko with: summary -->
<h2 data-bind="text: $data"></h2>
<!-- /ko -->
<button type="button" data-bind="click: change">
Change
</button>
JS :
function viewModel() {
var self = this;
this.title = ko.observable('0');
this.summary = ko.observable('0');
this.change = function() {
self.title(Math.random().toString());
if (self.title() < 0.5) {
self.summary(Math.random().toString());
} else {
self.summary(self.summary());
}
}
};
var vm = new viewModel();
ko.applyBindings(vm);
CSS :
h2
및 p
포장 기준 :
h2, p {
animation: bg 1s backwards;
}
@keyframes bg {
0% {
background: #00ff40;
}
100% {
background: initial;
}
}
Complete fiddle
가 어떻게 작동하는지의 (이것은 당신이 어떤 추가 코드를 포함하지 않았기 때문에 그냥 간단한 예입니다) 보자 각각의 요소 (h2
및 p
)의 내용이 아니라 with
바인딩을 적용하는 하나의 가상 요소에있는 요소들, 그러나 전체 요소 자체 (즉, 설명 사이에 p
및 h2
태그가 있음)는 래핑하는 가상 요소가 바인딩되는 값이 변경 될 때마다 다시 렌더링됩니다.
정의 된 CSS 애니메이션은 적용되는 요소가 만들어지면 재생되고 애니메이션은 반복되지 않기 때문에 요소의 배경이 원하는 밝은 색상에서 최종 색상으로 희미 해집니다 당신이 선택한 배경. IE가 initial
(this link 참조)에 문제가있을 수 있음에 유의하십시오.
편의를 위해 제공 한 코드에 임의성을 추가했습니다.당신은 충분히 클릭함으로써, title
의 값 (가능한 숫자를 간단하게하고 싶다)이 0.5
보다 작아야하고, summary
의 값이 변경되어야합니다.이 경우, 배경색 애니메이션입니다. title >= 0.5
이면 summary
의 값이 변경되지 않습니다. 따라서 요소가 다시 렌더링되지 않고 애니메이션이 재생되지 않습니다. 실제로는 은이 정확히 동일한 값으로 변경되었습니다. 당신이 동일한 값을 넘기면 녹아웃으로 변화가 일어나지 않습니다).
단점은 $data
을 값으로 사용하여 텍스트 내용을 바인딩하기 때문에 바인딩이 조금 더렵다는 것이지만 간단한 시나리오에서만 사용하면 유용 할 수 있습니다.
다른 스레드에서 작동하는 몇 가지 코드가 있습니다. http://stackoverflow.com/questions/1605698/text-blinking-jquery 플러그인을 필요로하지 않는 맨 위에 멋진 패키지가 두 개 있습니다. – Wes