Windows 8 アプリケーションで Peek Animation 機能を使用しようとしています。私のコードではrunHomeScreenUpdates
、特定の間隔でホーム画面のタイルを更新する関数を呼び出しています。
以前は、正常に機能していたcreateAddToListAnimation
関数を使用していました。しかし、小さいタイルには Peek Animation を使用したいと思います。MSDN の例で説明されているように、2 つの画像オブジェクトを渡します。前述のように「スタイルトッププロパティ」を変更して画像のオフセットも編集しましたが、機能しません。ここでのアニメーション オブジェクト「ピーカニメーション」はオフセット値を取得しません。ブレークポイントで確認したところ、アニメーション オブジェクトのオフセット配列の値が「0」になっていました。この offsetArray 値を変更するにはどうすればよいですか?
function peekTile(tile1, tile2) {
// Create peek animation
var peekAnimation = WinJS.UI.Animation.createPeekAnimation([tile1, tile2]);
// Reposition tiles to their desired post-animation position
tile1.style.top = "-120px";
tile2.style.top = "0px";
// Execute animation
peekAnimation.execute();
return "success";
}
function runHomeScreenUpdates(obj) {
initHomeScreenUpdates();
var updateInterval = obj.data("updateInterval");
var localStorageKey = obj.data("localStorageKey");
clearInterval($(obj).data("autoUpdateInterval"));
var data = localStorage.getItem(localStorageKey);
// for bigger tiles I used create add to list animation. it works fine.
if (WinJS.Navigation.location.indexOf("hub.html") >= 0) {
var interval = setInterval(function () {
var index = $(obj).data("index");
if (index == 22 || index == 23) {
var lists = JSON.parse(localStorage.getItem("lists"));
lists = lists[localStorage.getItem("selectedCity")] || {};
if (lists.count > 0) {
if (sessionStorage.getItem("listIndex") == null || sessionStorage.getItem("listIndex") >= (lists.count - 1)) {
sessionStorage.setItem("listIndex", 0);
} else {
sessionStorage.setItem("listIndex", parseInt(sessionStorage.getItem("listIndex")) + 1);
}
var div = $(obj).find(".largeTileTextTemplateMedText");
var newDiv = document.createElement("div");
newDiv.innerHTML = lists[sessionStorage.getItem("listIndex")].text;
newDiv.className = "largeTileTextTemplateMedText";
var affected = div.get(0);
// Step 1: Create the animation object and save the result
var animation = WinJS.UI.Animation.createAddToListAnimation(newDiv, affected);
// Step 2: Insert the element given in the added parameter immediately before
// the element given in the affected parameter. This causes both elements to move.
affected.parentNode.insertBefore(newDiv, affected);
// Step 3: Execute the animation
animation.execute().then(function () {
myData4[index].text = lists[sessionStorage.getItem("listIndex")].text;
myData4[index].id = lists[sessionStorage.getItem("listIndex")].id;
hubList = new WinJS.Binding.List(myData4);
groupedItems = hubList.createGrouped(function (item) { return item.group.key; }, function (item) { return item.group; });
});
$(affected).remove();
}
} else {
// for the smaller tiles i want to use the peek animation!! this part--
var img = $(obj).find(".foodshot");
var foodshots = JSON.parse(localStorage.getItem("foodshots"));
foodshots = foodshots[localStorage.getItem("selectedCity")] || {};
if (foodshots.count > 0) {
if (sessionStorage.getItem("foodshotIndex") == null || sessionStorage.getItem("foodshotIndex") >= (foodshots.count - 1)) {
sessionStorage.setItem("foodshotIndex", 0);
} else {
sessionStorage.setItem("foodshotIndex", parseInt(sessionStorage.getItem("foodshotIndex")) + 1);
}
var r = sessionStorage.getItem("foodshotIndex");
var newsrc = foodshots[r].url;
var newimg = document.createElement("img");
newimg.setAttribute("src", newsrc);
newimg.className = "foodshot";
var affected = img.get(0);
affected.style.top = "0px";
newimg.style.top = "120px";
var check = peekTile(affected, newimg);
if(check == "success"){
myData4[index].cuisineID = foodshots[r].cuisine_id;
myData4[index].cuisine = foodshots[r].cuisine;
myData4[index].picture = foodshots[r].url;
$(obj).find(".foodshot-text").get(0).innerHTML = foodshots[r].cuisine;
hubList = new WinJS.Binding.List(myData4);
groupedItems = hubList.createGrouped(function (item) { return item.group.key; }, function (item) { return item.group; });
};
$(affected).remove();
}
}
}, updateInterval);
$(obj).data("autoUpdateInterval", interval);
}
ホーム画面で。アニメーションを実行した後、画像が表示されません。