JavaScriptを色々あれこれしようとするがひたすら失敗を繰り返している
| Revision | 45 (tree) |
|---|---|
| Time | 2016-12-10 07:07:03 |
| Author | |
(empty log message)
| @@ -134,6 +134,10 @@ | ||
| 134 | 134 | background-color: rgba(156, 165, 55, 0.6); |
| 135 | 135 | box-shadow: 16px 16px 19px -11px rgba(0, 0, 0, 0.21); |
| 136 | 136 | } |
| 137 | + .palgroup3 { | |
| 138 | + background-color: rgba(27, 158, 131, 0.6); | |
| 139 | + box-shadow: 16px 16px 19px -11px rgba(0, 0, 0, 0.21); | |
| 140 | + } | |
| 137 | 141 | |
| 138 | 142 | .paldesc1, |
| 139 | 143 | .paldesc2 { |
| @@ -147,7 +151,7 @@ | ||
| 147 | 151 | color: rgba(255, 255, 255, 0.3); |
| 148 | 152 | } |
| 149 | 153 | .paldesc1 { |
| 150 | - left: -40px; top: -20px; | |
| 154 | + left: -20px; top: -20px; | |
| 151 | 155 | text-align: left; |
| 152 | 156 | } |
| 153 | 157 | .paldesc2 { |
| @@ -159,7 +163,8 @@ | ||
| 159 | 163 | /* パレット要素の定義 */ |
| 160 | 164 | .palbg, |
| 161 | 165 | .paltxtcol, |
| 162 | - .palact { | |
| 166 | + .palact, | |
| 167 | + .palset { | |
| 163 | 168 | display: inline-block; |
| 164 | 169 | position: absolute; |
| 165 | 170 | width: 50px; height: 50px; |
| @@ -183,6 +188,11 @@ | ||
| 183 | 188 | background-color: rgba(156, 165, 55, 0.6); |
| 184 | 189 | box-shadow: 10px 10px 20px -4px rgba(0,0,0,0.21); |
| 185 | 190 | } |
| 191 | + .palset { | |
| 192 | + border: 1px solid rgba(0,0,0,0.2); | |
| 193 | + background-color: rgba(27, 158, 131, 0.6); | |
| 194 | + box-shadow: 10px 10px 20px -4px rgba(0,0,0,0.21); | |
| 195 | + } | |
| 186 | 196 | |
| 187 | 197 | |
| 188 | 198 | /* フォーカス枠と拡大縮小・回転用マーカー定義 */ |
| @@ -19,7 +19,7 @@ | ||
| 19 | 19 | <button type=button class="pal" data-objid="pal" data-palid="1" title="現在のパレット設定を保存します">設定保存</button> |
| 20 | 20 | <button type=button class="pal" data-objid="pal" data-palid="2" title="設定画面を表示します">設定Drop</button> |
| 21 | 21 | <button type=button class="pal" data-objid="pal" data-palid="3" title="アニメーションを停止します">アニメ停止</button> |
| 22 | - <button type=button class="pal" data-objid="pal" data-palid="4" >枠表示</button> | |
| 22 | + <button type=button class="pal" data-objid="pal" data-palid="4">枠表示</button> | |
| 23 | 23 | <button type=button class="pal" data-objid="pal" data-palid="5">背景大</button> |
| 24 | 24 | <button type=button class="pal" data-objid="pal" data-palid="6">背景小</button> |
| 25 | 25 | <a href="#" id="save" download="DragDraw.dd" title="DragDraw.ddという名前でダウンロードフォルダに保存します">画像保存</a><br /> |
| @@ -32,48 +32,144 @@ | ||
| 32 | 32 | </style> |
| 33 | 33 | <!-- Palette --> |
| 34 | 34 | <style id="stylepalbg"> |
| 35 | - .palbg0 { background-image: url(dummy.png); } | |
| 36 | - .palbg1 { background-image: url(dummy.png); } | |
| 37 | - .palbg2 { background-image: url(dummy.png); } | |
| 38 | - .palbg3 { background-image: url(dummy.png); } | |
| 39 | - .palbg4 { background-image: url(dummy.png); } | |
| 35 | + .palbg0 { | |
| 36 | + background-image: url(dummy.png); | |
| 37 | + } | |
| 38 | + | |
| 39 | + .palbg1 { | |
| 40 | + background-image: url(dummy.png); | |
| 41 | + } | |
| 42 | + | |
| 43 | + .palbg2 { | |
| 44 | + background-image: url(dummy.png); | |
| 45 | + } | |
| 46 | + | |
| 47 | + .palbg3 { | |
| 48 | + background-image: url(dummy.png); | |
| 49 | + } | |
| 50 | + | |
| 51 | + .palbg4 { | |
| 52 | + background-image: url(dummy.png); | |
| 53 | + } | |
| 40 | 54 | </style> |
| 41 | 55 | <style id="stylepaltxtcol"> |
| 42 | - .paltxtcol0 { color: black; } | |
| 43 | - .paltxtcol1 { color: red; } | |
| 44 | - .paltxtcol2 { color: blue; } | |
| 45 | - .paltxtcol3 { color: green; } | |
| 46 | - .paltxtcol4 { color: brown; } | |
| 56 | + .paltxtcol0 { | |
| 57 | + color: black; | |
| 58 | + } | |
| 59 | + | |
| 60 | + .paltxtcol1 { | |
| 61 | + color: red; | |
| 62 | + } | |
| 63 | + | |
| 64 | + .paltxtcol2 { | |
| 65 | + color: blue; | |
| 66 | + } | |
| 67 | + | |
| 68 | + .paltxtcol3 { | |
| 69 | + color: green; | |
| 70 | + } | |
| 71 | + | |
| 72 | + .paltxtcol4 { | |
| 73 | + color: brown; | |
| 74 | + } | |
| 47 | 75 | </style> |
| 48 | 76 | <style id="stylepalact"> |
| 49 | - .palact0 { animation: animeY1 0.5s ease-in 0.3s 1 normal; } | |
| 77 | + .palact0 { | |
| 78 | + animation: animeY1 0.5s ease-in 0.3s 1 normal; | |
| 79 | + } | |
| 80 | + | |
| 50 | 81 | @keyframes animeY1 { |
| 51 | - 0% { transform: translateY(-60px) translateX(-30px); } | |
| 52 | - 10% { transform: translateY(20px) translateX(30px); } | |
| 53 | - 20% { transform: translateY(-40px) translateX(-20px); } | |
| 54 | - 30% { transform: translateY(50px) translateX(-10px); } | |
| 55 | - 40% { transform: translateY(-40px) translateX(20px); } | |
| 56 | - 50% { transform: translateY(30px) translateX(-15px); } | |
| 57 | - 60% { transform: translateY(-25px) translateX(0px); } | |
| 58 | - 70% { transform: translateY(15px) translateX(-15px); } | |
| 59 | - 80% { transform: translateY(-10px) translateX(10px); } | |
| 60 | - 90% { transform: translateY(0px) translateX(-5px); } | |
| 61 | - 100% { transform: translateY(0px) translateX(0px); } | |
| 82 | + 0% { | |
| 83 | + transform: translateY(-60px) translateX(-30px); | |
| 84 | + } | |
| 85 | + | |
| 86 | + 10% { | |
| 87 | + transform: translateY(20px) translateX(30px); | |
| 88 | + } | |
| 89 | + | |
| 90 | + 20% { | |
| 91 | + transform: translateY(-40px) translateX(-20px); | |
| 92 | + } | |
| 93 | + | |
| 94 | + 30% { | |
| 95 | + transform: translateY(50px) translateX(-10px); | |
| 96 | + } | |
| 97 | + | |
| 98 | + 40% { | |
| 99 | + transform: translateY(-40px) translateX(20px); | |
| 100 | + } | |
| 101 | + | |
| 102 | + 50% { | |
| 103 | + transform: translateY(30px) translateX(-15px); | |
| 104 | + } | |
| 105 | + | |
| 106 | + 60% { | |
| 107 | + transform: translateY(-25px) translateX(0px); | |
| 108 | + } | |
| 109 | + | |
| 110 | + 70% { | |
| 111 | + transform: translateY(15px) translateX(-15px); | |
| 112 | + } | |
| 113 | + | |
| 114 | + 80% { | |
| 115 | + transform: translateY(-10px) translateX(10px); | |
| 116 | + } | |
| 117 | + | |
| 118 | + 90% { | |
| 119 | + transform: translateY(0px) translateX(-5px); | |
| 120 | + } | |
| 121 | + | |
| 122 | + 100% { | |
| 123 | + transform: translateY(0px) translateX(0px); | |
| 124 | + } | |
| 62 | 125 | } |
| 63 | 126 | |
| 64 | - .palact1 { animation: animeact1 2s ease-in 0.3s 1 normal; } | |
| 65 | - @keyframes animeact1 { to { color: black; } } | |
| 66 | - .palact2 { animation: animeact2 2s ease-in 0.3s 1 normal; } | |
| 67 | - @keyframes animeact2 { to { color: black; } } | |
| 68 | - .palact3 { animation: animeact3 2s ease-in 0.3s 1 normal; } | |
| 69 | - @keyframes animeact3 { to { color: black; } } | |
| 70 | - .palact4 { animation: animeact4 2s ease-in 0.3s 1 normal; } | |
| 71 | - @keyframes animeact4 { to { color: black; } } | |
| 127 | + .palact1 { | |
| 128 | + animation: animeact1 2s ease-in 0.3s 1 normal; | |
| 129 | + } | |
| 130 | + | |
| 131 | + @keyframes animeact1 { | |
| 132 | + to { | |
| 133 | + color: black; | |
| 134 | + } | |
| 135 | + } | |
| 136 | + | |
| 137 | + .palact2 { | |
| 138 | + animation: animeact2 2s ease-in 0.3s 1 normal; | |
| 139 | + } | |
| 140 | + | |
| 141 | + @keyframes animeact2 { | |
| 142 | + to { | |
| 143 | + color: black; | |
| 144 | + } | |
| 145 | + } | |
| 146 | + | |
| 147 | + .palact3 { | |
| 148 | + animation: animeact3 2s ease-in 0.3s 1 normal; | |
| 149 | + } | |
| 150 | + | |
| 151 | + @keyframes animeact3 { | |
| 152 | + to { | |
| 153 | + color: black; | |
| 154 | + } | |
| 155 | + } | |
| 156 | + | |
| 157 | + .palact4 { | |
| 158 | + animation: animeact4 2s ease-in 0.3s 1 normal; | |
| 159 | + } | |
| 160 | + | |
| 161 | + @keyframes animeact4 { | |
| 162 | + to { | |
| 163 | + color: black; | |
| 164 | + } | |
| 165 | + } | |
| 72 | 166 | </style> |
| 73 | 167 | |
| 74 | - <fieldset class="palgroup palgroup0" data-objid="palgroup0" title="背景の色や画像を設定するパレットです"> | |
| 168 | + <fieldset class="palgroup palgroup0" data-objid="palgroup0" title="背景の色や画像を設定するパレットです"> | |
| 75 | 169 | <legend class="pallegend"> Background Palette </legend> |
| 76 | - <span class="paldesc1">背景</span><span class="paldesc2">色 </span> | |
| 170 | + <div style="overflow:hidden; position:absolute; left:0; top: 14px; width:100%; height:calc(100% - 14px); margin:0; padding:0;"> | |
| 171 | + <span class="paldesc1">背景</span><span class="paldesc2">色 </span> | |
| 172 | + </div> | |
| 77 | 173 | <div class="palbg palbg0" data-objid="palbg0" data-palid="0"></div> |
| 78 | 174 | <div class="palbg palbg1" data-objid="palbg1" data-palid="1"></div> |
| 79 | 175 | <div class="palbg palbg2" data-objid="palbg2" data-palid="2"></div> |
| @@ -83,8 +179,10 @@ | ||
| 83 | 179 | <br /> |
| 84 | 180 | |
| 85 | 181 | <fieldset class="palgroup palgroup1" data-objid="palgroup1" title="テキストの色を設定するパレットです"> |
| 86 | - <legend class="pallegend"> Text Color Palette </legend> | |
| 87 | - <span class="paldesc1">外観</span><span class="paldesc2">見た</span> | |
| 182 | + <legend class="pallegend"> Style Palette </legend> | |
| 183 | + <div style="overflow:hidden; position:absolute; left:0; top: 14px; width:100%; height:calc(100% - 14px); margin:0; padding:0;"> | |
| 184 | + <span class="paldesc1">外観</span><span class="paldesc2">見た</span> | |
| 185 | + </div> | |
| 88 | 186 | <div class="paltxtcol paltxtcol0" data-objid="paltxtcol0" data-palid="0">あ</div> |
| 89 | 187 | <div class="paltxtcol paltxtcol1" data-objid="paltxtcol1" data-palid="1">あ</div> |
| 90 | 188 | <div class="paltxtcol paltxtcol2" data-objid="paltxtcol2" data-palid="2">あ</div> |
| @@ -95,8 +193,10 @@ | ||
| 95 | 193 | <br /> |
| 96 | 194 | |
| 97 | 195 | <fieldset class="palgroup palgroup2" data-objid="palgroup2" title="動きを設定するパレットです"> |
| 98 | - <legend class="pallegend"> Action Palette <span id="btnpauseanim" class="buttonstyle" title="要素の動きを一時的に停止します">Ⅱ</span></legend> | |
| 99 | - <span class="paldesc1">動き</span><span class="paldesc2">流れ</span> | |
| 196 | + <legend class="pallegend"> Action Palette </legend> | |
| 197 | + <div style="overflow:hidden; position:absolute; left:0; top: 14px; width:100%; height:calc(100% - 14px); margin:0; padding:0;"> | |
| 198 | + <span class="paldesc1">動き</span><span class="paldesc2">流れ</span> | |
| 199 | + </div> | |
| 100 | 200 | <div class="palact palact0" data-objid="palact0" data-palid="0"></div> |
| 101 | 201 | <div class="palact palact1" data-objid="palact1" data-palid="1"></div> |
| 102 | 202 | <div class="palact palact2" data-objid="palact2" data-palid="2"></div> |
| @@ -103,8 +203,20 @@ | ||
| 103 | 203 | <div class="palact palact3" data-objid="palact3" data-palid="3"></div> |
| 104 | 204 | <div class="palact palact4" data-objid="palact4" data-palid="4"></div> |
| 105 | 205 | </fieldset> |
| 106 | - </div> | |
| 107 | 206 | |
| 207 | + <fieldset class="palgroup palgroup3" data-objid="palgroup3" title="設定を変更するパレットです"> | |
| 208 | + <legend class="pallegend"> Setting Palette </legend> | |
| 209 | + <div style="overflow:hidden; position:absolute; left:0; top: 14px; width:100%; height:calc(100% - 14px); margin:0; padding:0;"> | |
| 210 | + <span class="paldesc1">設定</span><span class="paldesc2">変更</span> | |
| 211 | + </div> | |
| 212 | + <div class="palset palset0" data-objid="palset0" data-palid="0" title="設定パレットを非表示にします。再度表示するには、設定画面から表示設定変更ができます。"><div style="font-size:10px;line-height:10px;">パレット非表示</div></div> | |
| 213 | + <div class="palset palset1" data-objid="palset1" data-palid="1" title="選択中の要素を削除します。何も選択していない場合は何もしません。">消</div> | |
| 214 | + <div class="palset palset2" data-objid="palset2" data-palid="2" title="識別しやすいように、表示中のテキストや画像に境界線を表示します。">枠</div> | |
| 215 | + <div class="palset palset3" data-objid="palset3" data-palid="3" title="アニメーションを停止/再開します。">動</div> | |
| 216 | + <div class="palset palset4" data-objid="palset4" data-palid="4" title="編集中の画像を保存します。保存した画像はダウンロードフォルダに保存されます。">保</div> | |
| 217 | + </fieldset> | |
| 218 | + </div> <!-- apparea --> | |
| 219 | + | |
| 108 | 220 | <script type="text/javascript" src="js/numeric-1.2.6.min.js"></script> |
| 109 | 221 | <script type="text/javascript" src="js/Common.js"></script> |
| 110 | 222 | <script type="text/javascript" src="js/Queue.js"></script> |
| @@ -439,6 +439,22 @@ | ||
| 439 | 439 | } |
| 440 | 440 | |
| 441 | 441 | |
| 442 | +function prohibitDropHandler_dragStart(evt) { | |
| 443 | + evt.preventDefault(); | |
| 444 | +} | |
| 445 | +function prohibitDropHandler_dragOver(evt) { | |
| 446 | + evt.preventDefault(); | |
| 447 | + evt.dataTransfer.dropEffect = "none"; | |
| 448 | +} | |
| 449 | +function prohibitDropHandler_drop(evt) { | |
| 450 | + this.debuglog('prohibitDropHandler_drop'); | |
| 451 | + evt.stopPropagation(); // event伝播を自分のところで止める(上位に行かなくなる) | |
| 452 | + evt.stopImmediatePropagation(); // 処理中要素の他のevent listenerを止める | |
| 453 | + evt.preventDefault(); // 要素既定のdefault動作を止める | |
| 454 | +} | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 442 | 458 | function matRotateX(rx) { |
| 443 | 459 | var rad = degToRad(rx); |
| 444 | 460 | var matrix = [ |
| @@ -31,7 +31,7 @@ | ||
| 31 | 31 | this.initDOMobj(); |
| 32 | 32 | |
| 33 | 33 | |
| 34 | - this.dropinitsize = 100.0; // File dropで作成する Elementの長辺の長さ | |
| 34 | + this.dropinitsize = 200.0; // File dropで作成する Elementの長辺の長さ | |
| 35 | 35 | } |
| 36 | 36 | initDOMobj() { |
| 37 | 37 | if (null != this.DOMbase) { |
| @@ -56,6 +56,17 @@ | ||
| 56 | 56 | this.DOMpalact[cnt].addEventListener('dragover', this.onDragOver.bind(this), false); |
| 57 | 57 | this.DOMpalact[cnt].addEventListener('drop', this.onDrop.bind(this), false); |
| 58 | 58 | } |
| 59 | + // 設定パレット | |
| 60 | + this.DOMpalset = document.getElementsByClassName('palset'); | |
| 61 | + for (let cnt = 0; cnt < this.DOMpalset.length; cnt++) { | |
| 62 | + this.DOMpalset[cnt].style.left = 10 + 70 * cnt + 'px'; | |
| 63 | + this.DOMpalset[cnt].style.top = 40 + 'px'; | |
| 64 | + this.DOMpalset[cnt].addEventListener('mousedown', this.onMouseDownSetting.bind(this), false); | |
| 65 | + this.DOMpalset[cnt].addEventListener('mouseup', this.mouseUpSetting.bind(this), false); | |
| 66 | + this.DOMpalset[cnt].addEventListener('dragstart', prohibitDropHandler_dragStart.bind(this), false); | |
| 67 | + this.DOMpalset[cnt].addEventListener('dragover', prohibitDropHandler_dragOver.bind(this), false); | |
| 68 | + this.DOMpalset[cnt].addEventListener('drop', prohibitDropHandler_drop.bind(this), false); | |
| 69 | + } | |
| 59 | 70 | } |
| 60 | 71 | |
| 61 | 72 | // 操作関数 ---------------------------- |
| @@ -164,7 +175,7 @@ | ||
| 164 | 175 | } |
| 165 | 176 | onDragOver(evt) { |
| 166 | 177 | evt.preventDefault(); |
| 167 | - evt.dataTransfer.dropEffect = "move"; | |
| 178 | + evt.dataTransfer.dropEffect = "copy"; | |
| 168 | 179 | } |
| 169 | 180 | onDrop(evt) { |
| 170 | 181 | this.debuglog('onDrop'); |
| @@ -191,6 +202,7 @@ | ||
| 191 | 202 | } |
| 192 | 203 | |
| 193 | 204 | |
| 205 | + | |
| 194 | 206 | // Mouse event |
| 195 | 207 | // 自elementをDragし、Drop時にTarget elementに自分のCSS classを適用する |
| 196 | 208 | onMouseDown(evt) { |
| @@ -232,7 +244,7 @@ | ||
| 232 | 244 | |
| 233 | 245 | this.draggingDOM.style.left = x + "px"; |
| 234 | 246 | this.draggingDOM.style.top = y + "px"; |
| 235 | - if( 1.0 == this.draggingDOM.style.opacity ) | |
| 247 | + if (1.0 == this.draggingDOM.style.opacity) | |
| 236 | 248 | this.draggingDOM.style.opacity = 0.4; |
| 237 | 249 | } |
| 238 | 250 | mouseUp(evt) { |
| @@ -263,10 +275,12 @@ | ||
| 263 | 275 | |
| 264 | 276 | // Drag中 palette elementから target element へ CSS classを追加する |
| 265 | 277 | // 同じ種類のCSS class(Text color, BG imgなど)が既にある場合は上書き |
| 266 | - if( null != target) | |
| 278 | + if (null != target) | |
| 267 | 279 | this.replaceCSSclassToElement(palobjid, target.DOMobject); |
| 268 | 280 | } |
| 269 | 281 | |
| 282 | + | |
| 283 | + | |
| 270 | 284 | // Target element へ CSS classを追加する |
| 271 | 285 | // 同じ種類のCSS class(Text color, BG imgなど)が既にある場合は上書き |
| 272 | 286 | replaceCSSclassToElement( |
| @@ -289,4 +303,71 @@ | ||
| 289 | 303 | // Drop target elementに Drag elementの CSS class定義を追加 |
| 290 | 304 | targetEle.classList.add(CSSname); |
| 291 | 305 | } |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + onMouseDownSetting(evt) { | |
| 311 | + evt.stopPropagation(); // event伝播を自分のところで止める(上位に行かなくなる) | |
| 312 | + evt.preventDefault(); // 要素既定のdefault動作を止める | |
| 313 | + } | |
| 314 | + mouseUpSetting(evt) { | |
| 315 | + evt.stopPropagation(); // event伝播を自分のところで止める(上位に行かなくなる) | |
| 316 | + evt.preventDefault(); // 要素既定のdefault動作を止める | |
| 317 | + | |
| 318 | + | |
| 319 | + switch (evt.target.dataset.objid) { | |
| 320 | + case "palset0": // 設定パレット非表示 | |
| 321 | + this.DOMpalset[0].parentNode.style.display = "none"; | |
| 322 | + break; | |
| 323 | + case "palset1": // 選択中要素を削除 | |
| 324 | + this.removeFocusedObject(); | |
| 325 | + break; | |
| 326 | + case "palset2": // 要素の枠を表示/非表示 | |
| 327 | + this.toggleElementBorderline(); | |
| 328 | + break; | |
| 329 | + case "palset3": // アニメーション停止/再開 | |
| 330 | + // DispObjとPalette要素にPauseAnimation css classを付与する | |
| 331 | + window.ObjIDMgr.toggleClassToAllObj('PauseAnimation'); | |
| 332 | + window.CSSPalette.toggleClassToActionPalettes('PauseAnimation'); | |
| 333 | + break; | |
| 334 | + case "palset4": // 編集中の画像をファイルに保存 | |
| 335 | + break; | |
| 336 | + case "palset5": // 編集中の画像をhtmlとして保存 | |
| 337 | + break; | |
| 338 | + case "palset6": // 拡大縮小操作のとき、Aspect比を保持する/しない | |
| 339 | + break; | |
| 340 | + default: | |
| 341 | + break; | |
| 342 | + } | |
| 343 | + } | |
| 344 | + | |
| 345 | + | |
| 346 | + toggleElementBorderline() { | |
| 347 | + let setStr = ''; | |
| 348 | + let nowSetting = window.frameArea.DOMobject.style.border; | |
| 349 | + if ("" == nowSetting) { | |
| 350 | + setStr = "1px solid black"; | |
| 351 | + } | |
| 352 | + else { | |
| 353 | + setStr = ""; | |
| 354 | + } | |
| 355 | + window.frameArea.DOMobject.style.border = setStr; | |
| 356 | + | |
| 357 | + let dispobjRuleBefore = ".DispObj { border: " | |
| 358 | + let dispobjRuleAfter = ";}"; | |
| 359 | + let elestyle = document.getElementById('styledispobj'); | |
| 360 | + elestyle.sheet.removeRule(0); | |
| 361 | + elestyle.sheet.insertRule(dispobjRuleBefore + setStr + dispobjRuleAfter, 0); | |
| 362 | + } | |
| 363 | + removeFocusedObject() { | |
| 364 | + let focused = window.partsFocus.getFocusedObjid(); | |
| 365 | + if (null != focused) { | |
| 366 | + // Delete command発行 | |
| 367 | + var obj1 = new CCommandObj(); | |
| 368 | + obj1.createCommand(cmdType.request, cmdAddress.ObjIDMgr, cmdAddress.ObjIDMgr, cmdCmd.deletebox, focused, null, null, null, 1); | |
| 369 | + window.postToWorker.post(obj1); | |
| 370 | + } | |
| 371 | + }; | |
| 372 | + | |
| 292 | 373 | } // class CSSPalette |
| @@ -24,14 +24,13 @@ | ||
| 24 | 24 | initialize() { |
| 25 | 25 | this.DOMobject = document.getElementsByClassName('palgroup'); |
| 26 | 26 | for (let cnt = 0; cnt < this.DOMobject.length; cnt++) { |
| 27 | - this.DOMobject[cnt].style.left = 0 + 'px'; | |
| 28 | - this.DOMobject[cnt].style.top = 30 * cnt + 'px'; | |
| 27 | + this.DOMobject[cnt].style.left = 600 + 'px'; | |
| 28 | + this.DOMobject[cnt].style.top = 130 * cnt + 'px'; | |
| 29 | 29 | this.DOMobject[cnt].addEventListener('mousedown', this.onMouseDown.bind(this), false); |
| 30 | 30 | this.DOMobject[cnt].addEventListener('mouseup', this.mouseUp.bind(this), false); |
| 31 | + this.DOMobject[cnt].addEventListener('touchstart', this.onTouchStart.bind(this), false); | |
| 32 | + this.DOMobject[cnt].addEventListener('touchend', this.touchEnd.bind(this), false); | |
| 31 | 33 | } |
| 32 | - | |
| 33 | - this.DOMpauseanim = document.getElementById('btnpauseanim'); | |
| 34 | - this.DOMpauseanim.addEventListener('click', this.onClickPauseAnimation.bind(this)); | |
| 35 | 34 | } |
| 36 | 35 | |
| 37 | 36 | // 操作関数 ---------------------------- |
| @@ -46,18 +45,27 @@ | ||
| 46 | 45 | // Event handler ----------------------- |
| 47 | 46 | |
| 48 | 47 | onMouseDown(evt) { |
| 48 | + evt.stopPropagation(); // event伝播を自分のところで止める(上位に行かなくなる) | |
| 49 | + evt.preventDefault(); // 要素既定のdefault動作を止める | |
| 49 | 50 | // Mouse eventをappAreaからCSSPalに渡してもらうように設定 |
| 50 | 51 | window.appArea.setMouseEventObj('palgroup', this.mouseMove.bind(this), null); |
| 52 | + this.startMovingPalette(evt.target, evt.pageX, evt.pageY); | |
| 53 | + } | |
| 54 | + onTouchStart(evt) { | |
| 51 | 55 | evt.stopPropagation(); // event伝播を自分のところで止める(上位に行かなくなる) |
| 52 | 56 | evt.preventDefault(); // 要素既定のdefault動作を止める |
| 57 | + // Mouse eventをappAreaからCSSPalに渡してもらうように設定 | |
| 58 | + window.appArea.setMouseEventObj('palgroup', this.touchMove.bind(this), null); | |
| 59 | + this.startMovingPalette(evt.touches[0].target, evt.touches[0].pageX, evt.touches[0].pageY); | |
| 60 | + } | |
| 61 | + startMovingPalette(eletarget, x, y){ | |
| 53 | 62 | |
| 54 | - let e = findClassNameParent('palgroup', evt.target); | |
| 63 | + let e = findClassNameParent('palgroup', eletarget); | |
| 55 | 64 | if (null == e) { |
| 56 | 65 | console.error('マウスダウン パレットグループが見つからない evt.target.objid = ' + evt.target.dataset.objid); |
| 57 | 66 | return; |
| 58 | 67 | } |
| 59 | 68 | |
| 60 | - | |
| 61 | 69 | // Drag対象を保持 |
| 62 | 70 | this.draggingDOM = e; |
| 63 | 71 | // ElementのDrag開始位置を保持 |
| @@ -64,17 +72,25 @@ | ||
| 64 | 72 | this.startElementX = parseInt(this.draggingDOM.style.left); |
| 65 | 73 | this.startElementY = parseInt(this.draggingDOM.style.top); |
| 66 | 74 | // MouseのDrag開始位置を保持 |
| 67 | - this.startDragX = evt.pageX; | |
| 68 | - this.startDragY = evt.pageY; | |
| 75 | + this.startDragX = x; | |
| 76 | + this.startDragY = y; | |
| 69 | 77 | } |
| 70 | 78 | mouseMove(evt) { |
| 71 | 79 | if (null == this.draggingDOM) return; |
| 72 | 80 | evt.stopPropagation(); // event伝播を自分のところで止める(上位に行かなくなる) |
| 73 | 81 | evt.preventDefault(); // 要素既定のdefault動作を止める |
| 74 | - | |
| 82 | + this.movingPalette(evt.target, evt.pageX, evt.pageY); | |
| 83 | + } | |
| 84 | + touchMove(evt) { | |
| 85 | + if (null == this.draggingDOM) return; | |
| 86 | + evt.stopPropagation(); // event伝播を自分のところで止める(上位に行かなくなる) | |
| 87 | + evt.preventDefault(); // 要素既定のdefault動作を止める | |
| 88 | + this.movingPalette(evt.touches[0].target, evt.touches[0].pageX, evt.touches[0].pageY); | |
| 89 | + } | |
| 90 | + movingPalette(eletarget, x, y) { | |
| 75 | 91 | // 画像の仮移動 |
| 76 | - this.endDragX = evt.pageX; | |
| 77 | - this.endDragY = evt.pageY; | |
| 92 | + this.endDragX = x; | |
| 93 | + this.endDragY = y; | |
| 78 | 94 | // 移動量取得 |
| 79 | 95 | let moveX = this.endDragX - this.startDragX; |
| 80 | 96 | let moveY = this.endDragY - this.startDragY; |
| @@ -96,20 +112,20 @@ | ||
| 96 | 112 | if (null == this.draggingDOM) return; |
| 97 | 113 | evt.stopPropagation(); // event伝播を自分のところで止める(上位に行かなくなる) |
| 98 | 114 | evt.preventDefault(); // 要素既定のdefault動作を止める |
| 99 | - | |
| 100 | - // Drag中 element情報をクリア | |
| 101 | - this.draggingDOM = null; | |
| 102 | 115 | // Mouse event callback設定をクリア |
| 103 | 116 | window.appArea.setMouseEventObj(null, null, null); |
| 117 | + this.endMovingPalette(); | |
| 104 | 118 | } |
| 105 | - | |
| 106 | - | |
| 107 | - // アニメーション停止ボタン押下 | |
| 108 | - onClickPauseAnimation(evt) { | |
| 109 | - // DispObjとPalette要素にPauseAnimation css classを付与する | |
| 110 | - window.ObjIDMgr.toggleClassToAllObj('PauseAnimation'); | |
| 111 | - window.CSSPalette.toggleClassToActionPalettes('PauseAnimation'); | |
| 112 | - | |
| 113 | - evt.target.innerText = ('Ⅱ' == evt.target.innerText) ? '>' : 'Ⅱ'; | |
| 119 | + touchEnd(evt) { | |
| 120 | + if (null == this.draggingDOM) return; | |
| 121 | + evt.stopPropagation(); // event伝播を自分のところで止める(上位に行かなくなる) | |
| 122 | + evt.preventDefault(); // 要素既定のdefault動作を止める | |
| 123 | + // Mouse event callback設定をクリア | |
| 124 | + window.appArea.setMouseEventObj(null, null, null); | |
| 125 | + this.endMovingPalette(); | |
| 114 | 126 | } |
| 127 | + endMovingPalette(){ | |
| 128 | + // Drag中 element情報をクリア | |
| 129 | + this.draggingDOM = null; | |
| 130 | + } | |
| 115 | 131 | } |
| @@ -134,6 +134,10 @@ | ||
| 134 | 134 | background-color: rgba(156, 165, 55, 0.6); |
| 135 | 135 | box-shadow: 16px 16px 19px -11px rgba(0, 0, 0, 0.21); |
| 136 | 136 | } |
| 137 | + .palgroup3 { | |
| 138 | + background-color: rgba(27, 158, 131, 0.6); | |
| 139 | + box-shadow: 16px 16px 19px -11px rgba(0, 0, 0, 0.21); | |
| 140 | + } | |
| 137 | 141 | |
| 138 | 142 | .paldesc1, |
| 139 | 143 | .paldesc2 { |
| @@ -147,7 +151,7 @@ | ||
| 147 | 151 | color: rgba(255, 255, 255, 0.3); |
| 148 | 152 | } |
| 149 | 153 | .paldesc1 { |
| 150 | - left: -40px; top: -20px; | |
| 154 | + left: -20px; top: -20px; | |
| 151 | 155 | text-align: left; |
| 152 | 156 | } |
| 153 | 157 | .paldesc2 { |
| @@ -159,7 +163,8 @@ | ||
| 159 | 163 | /* パレット要素の定義 */ |
| 160 | 164 | .palbg, |
| 161 | 165 | .paltxtcol, |
| 162 | - .palact { | |
| 166 | + .palact, | |
| 167 | + .palset { | |
| 163 | 168 | display: inline-block; |
| 164 | 169 | position: absolute; |
| 165 | 170 | width: 50px; height: 50px; |
| @@ -183,6 +188,11 @@ | ||
| 183 | 188 | background-color: rgba(156, 165, 55, 0.6); |
| 184 | 189 | box-shadow: 10px 10px 20px -4px rgba(0,0,0,0.21); |
| 185 | 190 | } |
| 191 | + .palset { | |
| 192 | + border: 1px solid rgba(0,0,0,0.2); | |
| 193 | + background-color: rgba(27, 158, 131, 0.6); | |
| 194 | + box-shadow: 10px 10px 20px -4px rgba(0,0,0,0.21); | |
| 195 | + } | |
| 186 | 196 | |
| 187 | 197 | |
| 188 | 198 | /* フォーカス枠と拡大縮小・回転用マーカー定義 */ |
| @@ -19,7 +19,7 @@ | ||
| 19 | 19 | <button type=button class="pal" data-objid="pal" data-palid="1" title="現在のパレット設定を保存します">設定保存</button> |
| 20 | 20 | <button type=button class="pal" data-objid="pal" data-palid="2" title="設定画面を表示します">設定Drop</button> |
| 21 | 21 | <button type=button class="pal" data-objid="pal" data-palid="3" title="アニメーションを停止します">アニメ停止</button> |
| 22 | - <button type=button class="pal" data-objid="pal" data-palid="4" >枠表示</button> | |
| 22 | + <button type=button class="pal" data-objid="pal" data-palid="4">枠表示</button> | |
| 23 | 23 | <button type=button class="pal" data-objid="pal" data-palid="5">背景大</button> |
| 24 | 24 | <button type=button class="pal" data-objid="pal" data-palid="6">背景小</button> |
| 25 | 25 | <a href="#" id="save" download="DragDraw.dd" title="DragDraw.ddという名前でダウンロードフォルダに保存します">画像保存</a><br /> |
| @@ -32,48 +32,144 @@ | ||
| 32 | 32 | </style> |
| 33 | 33 | <!-- Palette --> |
| 34 | 34 | <style id="stylepalbg"> |
| 35 | - .palbg0 { background-image: url(dummy.png); } | |
| 36 | - .palbg1 { background-image: url(dummy.png); } | |
| 37 | - .palbg2 { background-image: url(dummy.png); } | |
| 38 | - .palbg3 { background-image: url(dummy.png); } | |
| 39 | - .palbg4 { background-image: url(dummy.png); } | |
| 35 | + .palbg0 { | |
| 36 | + background-image: url(dummy.png); | |
| 37 | + } | |
| 38 | + | |
| 39 | + .palbg1 { | |
| 40 | + background-image: url(dummy.png); | |
| 41 | + } | |
| 42 | + | |
| 43 | + .palbg2 { | |
| 44 | + background-image: url(dummy.png); | |
| 45 | + } | |
| 46 | + | |
| 47 | + .palbg3 { | |
| 48 | + background-image: url(dummy.png); | |
| 49 | + } | |
| 50 | + | |
| 51 | + .palbg4 { | |
| 52 | + background-image: url(dummy.png); | |
| 53 | + } | |
| 40 | 54 | </style> |
| 41 | 55 | <style id="stylepaltxtcol"> |
| 42 | - .paltxtcol0 { color: black; } | |
| 43 | - .paltxtcol1 { color: red; } | |
| 44 | - .paltxtcol2 { color: blue; } | |
| 45 | - .paltxtcol3 { color: green; } | |
| 46 | - .paltxtcol4 { color: brown; } | |
| 56 | + .paltxtcol0 { | |
| 57 | + color: black; | |
| 58 | + } | |
| 59 | + | |
| 60 | + .paltxtcol1 { | |
| 61 | + color: red; | |
| 62 | + } | |
| 63 | + | |
| 64 | + .paltxtcol2 { | |
| 65 | + color: blue; | |
| 66 | + } | |
| 67 | + | |
| 68 | + .paltxtcol3 { | |
| 69 | + color: green; | |
| 70 | + } | |
| 71 | + | |
| 72 | + .paltxtcol4 { | |
| 73 | + color: brown; | |
| 74 | + } | |
| 47 | 75 | </style> |
| 48 | 76 | <style id="stylepalact"> |
| 49 | - .palact0 { animation: animeY1 0.5s ease-in 0.3s 1 normal; } | |
| 77 | + .palact0 { | |
| 78 | + animation: animeY1 0.5s ease-in 0.3s 1 normal; | |
| 79 | + } | |
| 80 | + | |
| 50 | 81 | @keyframes animeY1 { |
| 51 | - 0% { transform: translateY(-60px) translateX(-30px); } | |
| 52 | - 10% { transform: translateY(20px) translateX(30px); } | |
| 53 | - 20% { transform: translateY(-40px) translateX(-20px); } | |
| 54 | - 30% { transform: translateY(50px) translateX(-10px); } | |
| 55 | - 40% { transform: translateY(-40px) translateX(20px); } | |
| 56 | - 50% { transform: translateY(30px) translateX(-15px); } | |
| 57 | - 60% { transform: translateY(-25px) translateX(0px); } | |
| 58 | - 70% { transform: translateY(15px) translateX(-15px); } | |
| 59 | - 80% { transform: translateY(-10px) translateX(10px); } | |
| 60 | - 90% { transform: translateY(0px) translateX(-5px); } | |
| 61 | - 100% { transform: translateY(0px) translateX(0px); } | |
| 82 | + 0% { | |
| 83 | + transform: translateY(-60px) translateX(-30px); | |
| 84 | + } | |
| 85 | + | |
| 86 | + 10% { | |
| 87 | + transform: translateY(20px) translateX(30px); | |
| 88 | + } | |
| 89 | + | |
| 90 | + 20% { | |
| 91 | + transform: translateY(-40px) translateX(-20px); | |
| 92 | + } | |
| 93 | + | |
| 94 | + 30% { | |
| 95 | + transform: translateY(50px) translateX(-10px); | |
| 96 | + } | |
| 97 | + | |
| 98 | + 40% { | |
| 99 | + transform: translateY(-40px) translateX(20px); | |
| 100 | + } | |
| 101 | + | |
| 102 | + 50% { | |
| 103 | + transform: translateY(30px) translateX(-15px); | |
| 104 | + } | |
| 105 | + | |
| 106 | + 60% { | |
| 107 | + transform: translateY(-25px) translateX(0px); | |
| 108 | + } | |
| 109 | + | |
| 110 | + 70% { | |
| 111 | + transform: translateY(15px) translateX(-15px); | |
| 112 | + } | |
| 113 | + | |
| 114 | + 80% { | |
| 115 | + transform: translateY(-10px) translateX(10px); | |
| 116 | + } | |
| 117 | + | |
| 118 | + 90% { | |
| 119 | + transform: translateY(0px) translateX(-5px); | |
| 120 | + } | |
| 121 | + | |
| 122 | + 100% { | |
| 123 | + transform: translateY(0px) translateX(0px); | |
| 124 | + } | |
| 62 | 125 | } |
| 63 | 126 | |
| 64 | - .palact1 { animation: animeact1 2s ease-in 0.3s 1 normal; } | |
| 65 | - @keyframes animeact1 { to { color: black; } } | |
| 66 | - .palact2 { animation: animeact2 2s ease-in 0.3s 1 normal; } | |
| 67 | - @keyframes animeact2 { to { color: black; } } | |
| 68 | - .palact3 { animation: animeact3 2s ease-in 0.3s 1 normal; } | |
| 69 | - @keyframes animeact3 { to { color: black; } } | |
| 70 | - .palact4 { animation: animeact4 2s ease-in 0.3s 1 normal; } | |
| 71 | - @keyframes animeact4 { to { color: black; } } | |
| 127 | + .palact1 { | |
| 128 | + animation: animeact1 2s ease-in 0.3s 1 normal; | |
| 129 | + } | |
| 130 | + | |
| 131 | + @keyframes animeact1 { | |
| 132 | + to { | |
| 133 | + color: black; | |
| 134 | + } | |
| 135 | + } | |
| 136 | + | |
| 137 | + .palact2 { | |
| 138 | + animation: animeact2 2s ease-in 0.3s 1 normal; | |
| 139 | + } | |
| 140 | + | |
| 141 | + @keyframes animeact2 { | |
| 142 | + to { | |
| 143 | + color: black; | |
| 144 | + } | |
| 145 | + } | |
| 146 | + | |
| 147 | + .palact3 { | |
| 148 | + animation: animeact3 2s ease-in 0.3s 1 normal; | |
| 149 | + } | |
| 150 | + | |
| 151 | + @keyframes animeact3 { | |
| 152 | + to { | |
| 153 | + color: black; | |
| 154 | + } | |
| 155 | + } | |
| 156 | + | |
| 157 | + .palact4 { | |
| 158 | + animation: animeact4 2s ease-in 0.3s 1 normal; | |
| 159 | + } | |
| 160 | + | |
| 161 | + @keyframes animeact4 { | |
| 162 | + to { | |
| 163 | + color: black; | |
| 164 | + } | |
| 165 | + } | |
| 72 | 166 | </style> |
| 73 | 167 | |
| 74 | - <fieldset class="palgroup palgroup0" data-objid="palgroup0" title="背景の色や画像を設定するパレットです"> | |
| 168 | + <fieldset class="palgroup palgroup0" data-objid="palgroup0" title="背景の色や画像を設定するパレットです"> | |
| 75 | 169 | <legend class="pallegend"> Background Palette </legend> |
| 76 | - <span class="paldesc1">背景</span><span class="paldesc2">色 </span> | |
| 170 | + <div style="overflow:hidden; position:absolute; left:0; top: 14px; width:100%; height:calc(100% - 14px); margin:0; padding:0;"> | |
| 171 | + <span class="paldesc1">背景</span><span class="paldesc2">色 </span> | |
| 172 | + </div> | |
| 77 | 173 | <div class="palbg palbg0" data-objid="palbg0" data-palid="0"></div> |
| 78 | 174 | <div class="palbg palbg1" data-objid="palbg1" data-palid="1"></div> |
| 79 | 175 | <div class="palbg palbg2" data-objid="palbg2" data-palid="2"></div> |
| @@ -83,8 +179,10 @@ | ||
| 83 | 179 | <br /> |
| 84 | 180 | |
| 85 | 181 | <fieldset class="palgroup palgroup1" data-objid="palgroup1" title="テキストの色を設定するパレットです"> |
| 86 | - <legend class="pallegend"> Text Color Palette </legend> | |
| 87 | - <span class="paldesc1">外観</span><span class="paldesc2">見た</span> | |
| 182 | + <legend class="pallegend"> Style Palette </legend> | |
| 183 | + <div style="overflow:hidden; position:absolute; left:0; top: 14px; width:100%; height:calc(100% - 14px); margin:0; padding:0;"> | |
| 184 | + <span class="paldesc1">外観</span><span class="paldesc2">見た</span> | |
| 185 | + </div> | |
| 88 | 186 | <div class="paltxtcol paltxtcol0" data-objid="paltxtcol0" data-palid="0">あ</div> |
| 89 | 187 | <div class="paltxtcol paltxtcol1" data-objid="paltxtcol1" data-palid="1">あ</div> |
| 90 | 188 | <div class="paltxtcol paltxtcol2" data-objid="paltxtcol2" data-palid="2">あ</div> |
| @@ -95,8 +193,10 @@ | ||
| 95 | 193 | <br /> |
| 96 | 194 | |
| 97 | 195 | <fieldset class="palgroup palgroup2" data-objid="palgroup2" title="動きを設定するパレットです"> |
| 98 | - <legend class="pallegend"> Action Palette <span id="btnpauseanim" class="buttonstyle" title="要素の動きを一時的に停止します">Ⅱ</span></legend> | |
| 99 | - <span class="paldesc1">動き</span><span class="paldesc2">流れ</span> | |
| 196 | + <legend class="pallegend"> Action Palette </legend> | |
| 197 | + <div style="overflow:hidden; position:absolute; left:0; top: 14px; width:100%; height:calc(100% - 14px); margin:0; padding:0;"> | |
| 198 | + <span class="paldesc1">動き</span><span class="paldesc2">流れ</span> | |
| 199 | + </div> | |
| 100 | 200 | <div class="palact palact0" data-objid="palact0" data-palid="0"></div> |
| 101 | 201 | <div class="palact palact1" data-objid="palact1" data-palid="1"></div> |
| 102 | 202 | <div class="palact palact2" data-objid="palact2" data-palid="2"></div> |
| @@ -103,8 +203,20 @@ | ||
| 103 | 203 | <div class="palact palact3" data-objid="palact3" data-palid="3"></div> |
| 104 | 204 | <div class="palact palact4" data-objid="palact4" data-palid="4"></div> |
| 105 | 205 | </fieldset> |
| 106 | - </div> | |
| 107 | 206 | |
| 207 | + <fieldset class="palgroup palgroup3" data-objid="palgroup3" title="設定を変更するパレットです"> | |
| 208 | + <legend class="pallegend"> Setting Palette </legend> | |
| 209 | + <div style="overflow:hidden; position:absolute; left:0; top: 14px; width:100%; height:calc(100% - 14px); margin:0; padding:0;"> | |
| 210 | + <span class="paldesc1">設定</span><span class="paldesc2">変更</span> | |
| 211 | + </div> | |
| 212 | + <div class="palset palset0" data-objid="palset0" data-palid="0" title="設定パレットを非表示にします。再度表示するには、設定画面から表示設定変更ができます。"><div style="font-size:10px;line-height:10px;">パレット非表示</div></div> | |
| 213 | + <div class="palset palset1" data-objid="palset1" data-palid="1" title="選択中の要素を削除します。何も選択していない場合は何もしません。">消</div> | |
| 214 | + <div class="palset palset2" data-objid="palset2" data-palid="2" title="識別しやすいように、表示中のテキストや画像に境界線を表示します。">枠</div> | |
| 215 | + <div class="palset palset3" data-objid="palset3" data-palid="3" title="アニメーションを停止/再開します。">動</div> | |
| 216 | + <div class="palset palset4" data-objid="palset4" data-palid="4" title="編集中の画像を保存します。保存した画像はダウンロードフォルダに保存されます。">保</div> | |
| 217 | + </fieldset> | |
| 218 | + </div> <!-- apparea --> | |
| 219 | + | |
| 108 | 220 | <script type="text/javascript" src="js/numeric-1.2.6.min.js"></script> |
| 109 | 221 | <script type="text/javascript" src="js/Common.js"></script> |
| 110 | 222 | <script type="text/javascript" src="js/Queue.js"></script> |
| @@ -439,6 +439,22 @@ | ||
| 439 | 439 | } |
| 440 | 440 | |
| 441 | 441 | |
| 442 | +function prohibitDropHandler_dragStart(evt) { | |
| 443 | + evt.preventDefault(); | |
| 444 | +} | |
| 445 | +function prohibitDropHandler_dragOver(evt) { | |
| 446 | + evt.preventDefault(); | |
| 447 | + evt.dataTransfer.dropEffect = "none"; | |
| 448 | +} | |
| 449 | +function prohibitDropHandler_drop(evt) { | |
| 450 | + this.debuglog('prohibitDropHandler_drop'); | |
| 451 | + evt.stopPropagation(); // event伝播を自分のところで止める(上位に行かなくなる) | |
| 452 | + evt.stopImmediatePropagation(); // 処理中要素の他のevent listenerを止める | |
| 453 | + evt.preventDefault(); // 要素既定のdefault動作を止める | |
| 454 | +} | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 442 | 458 | function matRotateX(rx) { |
| 443 | 459 | var rad = degToRad(rx); |
| 444 | 460 | var matrix = [ |
| @@ -31,7 +31,7 @@ | ||
| 31 | 31 | this.initDOMobj(); |
| 32 | 32 | |
| 33 | 33 | |
| 34 | - this.dropinitsize = 100.0; // File dropで作成する Elementの長辺の長さ | |
| 34 | + this.dropinitsize = 200.0; // File dropで作成する Elementの長辺の長さ | |
| 35 | 35 | } |
| 36 | 36 | initDOMobj() { |
| 37 | 37 | if (null != this.DOMbase) { |
| @@ -56,6 +56,17 @@ | ||
| 56 | 56 | this.DOMpalact[cnt].addEventListener('dragover', this.onDragOver.bind(this), false); |
| 57 | 57 | this.DOMpalact[cnt].addEventListener('drop', this.onDrop.bind(this), false); |
| 58 | 58 | } |
| 59 | + // 設定パレット | |
| 60 | + this.DOMpalset = document.getElementsByClassName('palset'); | |
| 61 | + for (let cnt = 0; cnt < this.DOMpalset.length; cnt++) { | |
| 62 | + this.DOMpalset[cnt].style.left = 10 + 70 * cnt + 'px'; | |
| 63 | + this.DOMpalset[cnt].style.top = 40 + 'px'; | |
| 64 | + this.DOMpalset[cnt].addEventListener('mousedown', this.onMouseDownSetting.bind(this), false); | |
| 65 | + this.DOMpalset[cnt].addEventListener('mouseup', this.mouseUpSetting.bind(this), false); | |
| 66 | + this.DOMpalset[cnt].addEventListener('dragstart', prohibitDropHandler_dragStart.bind(this), false); | |
| 67 | + this.DOMpalset[cnt].addEventListener('dragover', prohibitDropHandler_dragOver.bind(this), false); | |
| 68 | + this.DOMpalset[cnt].addEventListener('drop', prohibitDropHandler_drop.bind(this), false); | |
| 69 | + } | |
| 59 | 70 | } |
| 60 | 71 | |
| 61 | 72 | // 操作関数 ---------------------------- |
| @@ -164,7 +175,7 @@ | ||
| 164 | 175 | } |
| 165 | 176 | onDragOver(evt) { |
| 166 | 177 | evt.preventDefault(); |
| 167 | - evt.dataTransfer.dropEffect = "move"; | |
| 178 | + evt.dataTransfer.dropEffect = "copy"; | |
| 168 | 179 | } |
| 169 | 180 | onDrop(evt) { |
| 170 | 181 | this.debuglog('onDrop'); |
| @@ -191,6 +202,7 @@ | ||
| 191 | 202 | } |
| 192 | 203 | |
| 193 | 204 | |
| 205 | + | |
| 194 | 206 | // Mouse event |
| 195 | 207 | // 自elementをDragし、Drop時にTarget elementに自分のCSS classを適用する |
| 196 | 208 | onMouseDown(evt) { |
| @@ -232,7 +244,7 @@ | ||
| 232 | 244 | |
| 233 | 245 | this.draggingDOM.style.left = x + "px"; |
| 234 | 246 | this.draggingDOM.style.top = y + "px"; |
| 235 | - if( 1.0 == this.draggingDOM.style.opacity ) | |
| 247 | + if (1.0 == this.draggingDOM.style.opacity) | |
| 236 | 248 | this.draggingDOM.style.opacity = 0.4; |
| 237 | 249 | } |
| 238 | 250 | mouseUp(evt) { |
| @@ -263,10 +275,12 @@ | ||
| 263 | 275 | |
| 264 | 276 | // Drag中 palette elementから target element へ CSS classを追加する |
| 265 | 277 | // 同じ種類のCSS class(Text color, BG imgなど)が既にある場合は上書き |
| 266 | - if( null != target) | |
| 278 | + if (null != target) | |
| 267 | 279 | this.replaceCSSclassToElement(palobjid, target.DOMobject); |
| 268 | 280 | } |
| 269 | 281 | |
| 282 | + | |
| 283 | + | |
| 270 | 284 | // Target element へ CSS classを追加する |
| 271 | 285 | // 同じ種類のCSS class(Text color, BG imgなど)が既にある場合は上書き |
| 272 | 286 | replaceCSSclassToElement( |
| @@ -289,4 +303,71 @@ | ||
| 289 | 303 | // Drop target elementに Drag elementの CSS class定義を追加 |
| 290 | 304 | targetEle.classList.add(CSSname); |
| 291 | 305 | } |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + onMouseDownSetting(evt) { | |
| 311 | + evt.stopPropagation(); // event伝播を自分のところで止める(上位に行かなくなる) | |
| 312 | + evt.preventDefault(); // 要素既定のdefault動作を止める | |
| 313 | + } | |
| 314 | + mouseUpSetting(evt) { | |
| 315 | + evt.stopPropagation(); // event伝播を自分のところで止める(上位に行かなくなる) | |
| 316 | + evt.preventDefault(); // 要素既定のdefault動作を止める | |
| 317 | + | |
| 318 | + | |
| 319 | + switch (evt.target.dataset.objid) { | |
| 320 | + case "palset0": // 設定パレット非表示 | |
| 321 | + this.DOMpalset[0].parentNode.style.display = "none"; | |
| 322 | + break; | |
| 323 | + case "palset1": // 選択中要素を削除 | |
| 324 | + this.removeFocusedObject(); | |
| 325 | + break; | |
| 326 | + case "palset2": // 要素の枠を表示/非表示 | |
| 327 | + this.toggleElementBorderline(); | |
| 328 | + break; | |
| 329 | + case "palset3": // アニメーション停止/再開 | |
| 330 | + // DispObjとPalette要素にPauseAnimation css classを付与する | |
| 331 | + window.ObjIDMgr.toggleClassToAllObj('PauseAnimation'); | |
| 332 | + window.CSSPalette.toggleClassToActionPalettes('PauseAnimation'); | |
| 333 | + break; | |
| 334 | + case "palset4": // 編集中の画像をファイルに保存 | |
| 335 | + break; | |
| 336 | + case "palset5": // 編集中の画像をhtmlとして保存 | |
| 337 | + break; | |
| 338 | + case "palset6": // 拡大縮小操作のとき、Aspect比を保持する/しない | |
| 339 | + break; | |
| 340 | + default: | |
| 341 | + break; | |
| 342 | + } | |
| 343 | + } | |
| 344 | + | |
| 345 | + | |
| 346 | + toggleElementBorderline() { | |
| 347 | + let setStr = ''; | |
| 348 | + let nowSetting = window.frameArea.DOMobject.style.border; | |
| 349 | + if ("" == nowSetting) { | |
| 350 | + setStr = "1px solid black"; | |
| 351 | + } | |
| 352 | + else { | |
| 353 | + setStr = ""; | |
| 354 | + } | |
| 355 | + window.frameArea.DOMobject.style.border = setStr; | |
| 356 | + | |
| 357 | + let dispobjRuleBefore = ".DispObj { border: " | |
| 358 | + let dispobjRuleAfter = ";}"; | |
| 359 | + let elestyle = document.getElementById('styledispobj'); | |
| 360 | + elestyle.sheet.removeRule(0); | |
| 361 | + elestyle.sheet.insertRule(dispobjRuleBefore + setStr + dispobjRuleAfter, 0); | |
| 362 | + } | |
| 363 | + removeFocusedObject() { | |
| 364 | + let focused = window.partsFocus.getFocusedObjid(); | |
| 365 | + if (null != focused) { | |
| 366 | + // Delete command発行 | |
| 367 | + var obj1 = new CCommandObj(); | |
| 368 | + obj1.createCommand(cmdType.request, cmdAddress.ObjIDMgr, cmdAddress.ObjIDMgr, cmdCmd.deletebox, focused, null, null, null, 1); | |
| 369 | + window.postToWorker.post(obj1); | |
| 370 | + } | |
| 371 | + }; | |
| 372 | + | |
| 292 | 373 | } // class CSSPalette |
| @@ -24,14 +24,13 @@ | ||
| 24 | 24 | initialize() { |
| 25 | 25 | this.DOMobject = document.getElementsByClassName('palgroup'); |
| 26 | 26 | for (let cnt = 0; cnt < this.DOMobject.length; cnt++) { |
| 27 | - this.DOMobject[cnt].style.left = 0 + 'px'; | |
| 28 | - this.DOMobject[cnt].style.top = 30 * cnt + 'px'; | |
| 27 | + this.DOMobject[cnt].style.left = 600 + 'px'; | |
| 28 | + this.DOMobject[cnt].style.top = 130 * cnt + 'px'; | |
| 29 | 29 | this.DOMobject[cnt].addEventListener('mousedown', this.onMouseDown.bind(this), false); |
| 30 | 30 | this.DOMobject[cnt].addEventListener('mouseup', this.mouseUp.bind(this), false); |
| 31 | + this.DOMobject[cnt].addEventListener('touchstart', this.onTouchStart.bind(this), false); | |
| 32 | + this.DOMobject[cnt].addEventListener('touchend', this.touchEnd.bind(this), false); | |
| 31 | 33 | } |
| 32 | - | |
| 33 | - this.DOMpauseanim = document.getElementById('btnpauseanim'); | |
| 34 | - this.DOMpauseanim.addEventListener('click', this.onClickPauseAnimation.bind(this)); | |
| 35 | 34 | } |
| 36 | 35 | |
| 37 | 36 | // 操作関数 ---------------------------- |
| @@ -46,18 +45,27 @@ | ||
| 46 | 45 | // Event handler ----------------------- |
| 47 | 46 | |
| 48 | 47 | onMouseDown(evt) { |
| 48 | + evt.stopPropagation(); // event伝播を自分のところで止める(上位に行かなくなる) | |
| 49 | + evt.preventDefault(); // 要素既定のdefault動作を止める | |
| 49 | 50 | // Mouse eventをappAreaからCSSPalに渡してもらうように設定 |
| 50 | 51 | window.appArea.setMouseEventObj('palgroup', this.mouseMove.bind(this), null); |
| 52 | + this.startMovingPalette(evt.target, evt.pageX, evt.pageY); | |
| 53 | + } | |
| 54 | + onTouchStart(evt) { | |
| 51 | 55 | evt.stopPropagation(); // event伝播を自分のところで止める(上位に行かなくなる) |
| 52 | 56 | evt.preventDefault(); // 要素既定のdefault動作を止める |
| 57 | + // Mouse eventをappAreaからCSSPalに渡してもらうように設定 | |
| 58 | + window.appArea.setMouseEventObj('palgroup', this.touchMove.bind(this), null); | |
| 59 | + this.startMovingPalette(evt.touches[0].target, evt.touches[0].pageX, evt.touches[0].pageY); | |
| 60 | + } | |
| 61 | + startMovingPalette(eletarget, x, y){ | |
| 53 | 62 | |
| 54 | - let e = findClassNameParent('palgroup', evt.target); | |
| 63 | + let e = findClassNameParent('palgroup', eletarget); | |
| 55 | 64 | if (null == e) { |
| 56 | 65 | console.error('マウスダウン パレットグループが見つからない evt.target.objid = ' + evt.target.dataset.objid); |
| 57 | 66 | return; |
| 58 | 67 | } |
| 59 | 68 | |
| 60 | - | |
| 61 | 69 | // Drag対象を保持 |
| 62 | 70 | this.draggingDOM = e; |
| 63 | 71 | // ElementのDrag開始位置を保持 |
| @@ -64,17 +72,25 @@ | ||
| 64 | 72 | this.startElementX = parseInt(this.draggingDOM.style.left); |
| 65 | 73 | this.startElementY = parseInt(this.draggingDOM.style.top); |
| 66 | 74 | // MouseのDrag開始位置を保持 |
| 67 | - this.startDragX = evt.pageX; | |
| 68 | - this.startDragY = evt.pageY; | |
| 75 | + this.startDragX = x; | |
| 76 | + this.startDragY = y; | |
| 69 | 77 | } |
| 70 | 78 | mouseMove(evt) { |
| 71 | 79 | if (null == this.draggingDOM) return; |
| 72 | 80 | evt.stopPropagation(); // event伝播を自分のところで止める(上位に行かなくなる) |
| 73 | 81 | evt.preventDefault(); // 要素既定のdefault動作を止める |
| 74 | - | |
| 82 | + this.movingPalette(evt.target, evt.pageX, evt.pageY); | |
| 83 | + } | |
| 84 | + touchMove(evt) { | |
| 85 | + if (null == this.draggingDOM) return; | |
| 86 | + evt.stopPropagation(); // event伝播を自分のところで止める(上位に行かなくなる) | |
| 87 | + evt.preventDefault(); // 要素既定のdefault動作を止める | |
| 88 | + this.movingPalette(evt.touches[0].target, evt.touches[0].pageX, evt.touches[0].pageY); | |
| 89 | + } | |
| 90 | + movingPalette(eletarget, x, y) { | |
| 75 | 91 | // 画像の仮移動 |
| 76 | - this.endDragX = evt.pageX; | |
| 77 | - this.endDragY = evt.pageY; | |
| 92 | + this.endDragX = x; | |
| 93 | + this.endDragY = y; | |
| 78 | 94 | // 移動量取得 |
| 79 | 95 | let moveX = this.endDragX - this.startDragX; |
| 80 | 96 | let moveY = this.endDragY - this.startDragY; |
| @@ -96,20 +112,20 @@ | ||
| 96 | 112 | if (null == this.draggingDOM) return; |
| 97 | 113 | evt.stopPropagation(); // event伝播を自分のところで止める(上位に行かなくなる) |
| 98 | 114 | evt.preventDefault(); // 要素既定のdefault動作を止める |
| 99 | - | |
| 100 | - // Drag中 element情報をクリア | |
| 101 | - this.draggingDOM = null; | |
| 102 | 115 | // Mouse event callback設定をクリア |
| 103 | 116 | window.appArea.setMouseEventObj(null, null, null); |
| 117 | + this.endMovingPalette(); | |
| 104 | 118 | } |
| 105 | - | |
| 106 | - | |
| 107 | - // アニメーション停止ボタン押下 | |
| 108 | - onClickPauseAnimation(evt) { | |
| 109 | - // DispObjとPalette要素にPauseAnimation css classを付与する | |
| 110 | - window.ObjIDMgr.toggleClassToAllObj('PauseAnimation'); | |
| 111 | - window.CSSPalette.toggleClassToActionPalettes('PauseAnimation'); | |
| 112 | - | |
| 113 | - evt.target.innerText = ('Ⅱ' == evt.target.innerText) ? '>' : 'Ⅱ'; | |
| 119 | + touchEnd(evt) { | |
| 120 | + if (null == this.draggingDOM) return; | |
| 121 | + evt.stopPropagation(); // event伝播を自分のところで止める(上位に行かなくなる) | |
| 122 | + evt.preventDefault(); // 要素既定のdefault動作を止める | |
| 123 | + // Mouse event callback設定をクリア | |
| 124 | + window.appArea.setMouseEventObj(null, null, null); | |
| 125 | + this.endMovingPalette(); | |
| 114 | 126 | } |
| 127 | + endMovingPalette(){ | |
| 128 | + // Drag中 element情報をクリア | |
| 129 | + this.draggingDOM = null; | |
| 130 | + } | |
| 115 | 131 | } |