knockout.jsでモーダルウィンドウ
- <!DOCTYPE html>
- <html lang="ja">
- <head>
- <meta charset="UTF-8">
- <title>knockout.jsでモーダルウィンドウ</title>
- <script type="text/javascript" src="jquery-1.5.1.min.js"></script>
- <script type="text/javascript" src="knockout-2.1.0beta.js"></script>
- <script type="text/javascript">
- // モーダルウィンドウのマスク
- ko.bindingHandlers.koModalMask = {
- update: function(element, valueAccessor, allBindingsAccessor)
- {
- // 現状の値と、サブプロパティ一覧の取得
- var value = valueAccessor(), allBindings = allBindingsAccessor();
- var valueUnwrapped = ko.utils.unwrapObservable(value);
-
- // サブプロパティ:maskBgColorの値をセット
- var maskBgColor = allBindings.maskBgColor || "#000";
-
- // DOMをいじる
- if (valueUnwrapped == false)
- {
- $(element).hide();
- }
- else
- {
- $(element).css({'width':$(window).width(), 'height':$(document).height()});
- $(element).css({'backgroundColor': maskBgColor});
- $(element).css({'position': 'absolute', 'left': '0', 'top': '0'});
- $(element).css({'z-index': '9000'});
- $(element).fadeIn(600);
- $(element).fadeTo("slow", 0.8);
- }
- }
- };
-
- // モーダルウィンドウ
- ko.bindingHandlers.koModalWindow = {
- update: function(element, valueAccessor, allBindingsAccessor)
- {
- // 現状の値と、サブプロパティ一覧の取得
- var value = valueAccessor(), allBindings = allBindingsAccessor();
- var valueUnwrapped = ko.utils.unwrapObservable(value);
-
- // サブプロパティ:modalBgColorの値をセット
- var modalBgColor = allBindings.modalBgColor || "#fff";
-
- // DOMをいじる
- if (valueUnwrapped == false)
- {
- $(element).hide();
- }
- else
- {
- $(element).css({'backgroundColor': modalBgColor});
- $(element).css({'z-index': '9999'});
- $(element).fadeIn(1000);
- }
- }
- };
- $(document).ready(function () {
- ko.applyBindings(new ViewModel());
- });
- function ViewModel() {
- var self = this;
- self.maskModal = ko.observable(false);
- self.windowModal = ko.observable(false);
-
- // 開く
- self.openModal = function()
- {
- self.maskModal(true);
- self.windowModal(true);
- }
-
- // 閉じる
- self.closeModal = function()
- {
- self.maskModal(false);
- self.windowModal(false);
- }
- }
- </script>
- <style type="text/css">
- .windowModal
- {
- position:absolute;
- left:0; top:0;
- z-index:9999;
- background:#fff;
- }
- </style>
- </head>
- <body>
- <div data-bind="koModalMask: maskModal, click: closeModal"></div>
- <h1>knockout.jsでモーダルウィンドウ</h1>
- <button data-bind="click: openModal">モーダル</button>
- <div style="position:absolute;left:0; top:30px;" data-bind="koModalWindow: windowModal">
- テスト
- <button data-bind="click: closeModal">閉じる</button>
- </div>
- <div style="font-size:10pt;text-align:right;margin-top:0.5em;">
- <a href="//tips.recatnap.info/" target="_top">PCスキルの小技・忘却防止メモ</a> -
- <a href="//tips.recatnap.info/wiki/" target="_top">PCスキルの小技・忘却防止メモのまとめ(wiki)</a>
- </div>
- <div style="font-size:10pt;text-align:center;margin-top:0.5em;padding:0.5em;border-top:1px solid #ccc;">
- Copyright © 2009 by PCスキルの小技・忘却防止メモ. All rights reserved.
- </div>
- </body>
- </html>