滑鼠事件的處置 01 首先, 思考一下用滑鼠畫線的操作動作, 為此必須處理 : mousedown mousemove mouseup 等 3 個事件 各個事件中進行的處理如表 01-1 所示 一開始加入的事件處理器只有 mousedown, mousemove mouseup 的事件處理器則是視需

Similar documents
關於本書 l 3 PhoneGap Appcelerator Titanium Sencha Touch (wrapper framework) Native App PhoneGap Build Native App Hybrid App Java Objective-C Android SDK

本 课 程 作 为 非 计 算 机 专 业 本 科 通 识 课 程, 是 一 门 理 论 和 实 践 紧 密 结 合 的 实 用 课 程, 内 容 包 括 计 算 机 基 础 部 分 和 程 序 设 计 部 分 计 算 机 基 础 部 分 涵 盖 计 算 机 软 硬 件 组 成 数 制 表 示 操

chapter 2 HTML5 目錄iii HTML HTML HTML HTML HTML canvas

Microsoft Word - 最新正文.doc

06 01 action JavaScript action jquery jquery AJAX CSS jquery CSS jquery HTML CSS jquery.css() getter setter.css('backgroundcolor') jquery CSS b

輕鬆學 Dreamweaver CS5 網頁設計..\Example\Ch0\ \.html..\example\ch0\ \mouse.txt..\example\ch0\ \ _Ok.html 學習重點 JavaScript 複製程式碼 mouse.txt Ctrl+C Ctrl+C 0-4

關於本書 Part 3 CSS XHTML Ajax Part 4 HTML 5 API JavaScript HTML 5 API Canvas API ( ) Video/Audio API ( ) Drag and Drop API ( ) Geolocation API ( ) Part 5

Microsoft Word - 2AF63內文.doc

Chapter V.S. PC

投影片 1

天仁期末個人報告1.PDF

开发技术大揭秘册子内页_Vol.3_1123_预览版

! 2000 CSSsprites.com Web FTP app 20% 80% getelementbyid() UI Facebook F8 Web CSSsprites.com Web JavaScript CSS React xi React UI UI 反應 UI 宣告 d

2014年大学生村官考试公共基础知识:社会革命和社会改革

朝陽科技大學八十八學年度招考碩士班簡章目錄

PowerPoint 簡報

導讀 ASP.NET HTML ASP 第一篇 基礎篇第 1 章 認識 ASP.NET ASP.NET ASP.NET ASP.NET ASP.NET 第 2 章 認識 Visual Studio 20 開發環境 Visual Studio 20 Visual Studio 20 第二篇 C# 程式

中国软件2013校园招聘通知



3-2 Canvas+js

<4D F736F F D D F31325FAD5EA4E5B8C9B1CFB1D0BEC7BAF4AFB8A4A7B35DAD70BB50ABD8B86D2E646F63>

目 录 第 五 部 分 第 六 部 分 第 七 部 分 第 八 部 分 投 标 邀 请 投 标 人 须 知 附 表 评 标 方 法 和 评 分 细 则 项 目 需 求 和 技 术 方 案 要 求 1

2012年报.xls

05 01 accordion UI containers 03 Accordion accordion UI accordion 54

Microsoft Word - ch02.doc

2016 Q&A

國立臺灣科技大學

中南大学第二届软件创新大赛

老码农原创小说《码农故事》

目 录 推 荐 文 章 1 1. 关 于 我 校 信 息 化 服 务 开 展 的 一 些 思 考 ( 人 事 处 周 礼 ) 1 2. 围 绕 协 同 创 新 理 念 构 建 科 研 服 务 管 理 信 息 化 新 体 系 ( 科 研 院 史 红 兵 钱 秀 红 方 令 超 )4 3. 协 同 科

超連結 03 URI (Universal Resource Identifier) URI Web URL (Universal Resource Locator) URI URI :// [: ]/ [/ 2...]/

內 容 1. 參 賽 小 組 簡 介 緣 起 故 事 大 綱 角 色 關 係 表 參 賽 作 品 摘 要 ) 遊 戲 類 型 ) 遊 戲 特 性 ) 腳 本 劇 情 ) 設 計 內 容..

CU0594.pdf

Microsoft Word - PHP7Ch01.docx

第 1 列 的 按 鈕 從 Albatross ~ Duck 1, 第 2 列 按 鈕 從 Eagle ~ Hawk 2, 第 3 行 按 鈕 從 Ibis ~ Lark 3, 而 只 有 第 3 列 按 鈕 多 設 定 span 元 素 ( 理 由 後 面 會 詳 細 說 明 ) html 具 h

The golden pins of the PCI card can be oxidized after months or years

计算机软件技术专业教学计划

目 录 目 录 平 台 概 述 技 术 架 构 技 术 特 点 基 于 统 一 平 台 的 多 产 品 线 支 撑 先 进 性 安 全 性 开 放 性 高 性 能 和

臺銀人壽「98年九至十一職等人員甄試」

Chapter 1 選 用 好 的 燜 燒 罐 選 用 好 的 燜 燒 罐 是 做 好 燜 燒 罐 料 理 最 重 要 的 步 驟, 除 了 須 注 意 使 用 的 材 質 是 否 符 合 食 器 使 用 標 準, 也 須 注 意 燜 燒 罐 的 保 溫 效 果, 才 能 安 心 享 用 燜 燒 罐

2.4 Selenium Python Selenium Selenium Selenium Selenium pip install selenium Chrome WebDriver Google Chrome (Linux, Mac, Windows) Chrome WebDriv

XUI 01 XUIJavaScriptPhoneGapRob Ellis PhoneGapBrian LerouxXUI jqueryapicss jquery jqueryjavascript API JavaScript PhoneGap XUI

Microsoft Word - 改版式网页全文.doc

untitled

Microsoft Word - 01.DOC

技術筆記 01 addlass()/removelass() 方法對指定的 HTML 元素附加 class 屬性可用 addlass() 方法, 刪除 class 屬性則用 removelass() 方法 透過附加 / 刪除設定 SS 的類別, 就可改變該元素的樣式 其與 animate() 方法不

Microsoft Word - SPEC

css-03.pdf


FileMaker 15 WebDirect 指南

(一)工務類:專業

5-1 nav css 5-2

实 际 上,2012 年 以 来, 移 动 互 联 网 领 域 的 热 潮 已 经 有 所 回 落 从 产 品 创 新 社 区 极 客 公 园 的 跟 踪 数 据 来 看,2012 年 上 半 年 移 动 互 联 网 的 新 生 应 用 数 量 比 去 年 下 滑 了 30% 以 上, 结 合 投

第 25 屆 國 家 磐 石 獎 - 卓 越 中 小 企 業 選 拔 表 揚 活 動 申 請 須 知 一 依 據 : 本 須 知 依 據 經 濟 部 中 小 企 業 處 國 家 磐 石 獎 卓 越 中 小 企 業 選 拔 表 揚 作 業 要 點 訂 定 二 目 的 : 中 小 企 業 為 國 家 經


2016 年 全 省 一 般 公 共 预 算 收 入 表 ( 代 编 ) 项 目 2016 年 预 算 数 单 位 : 亿 元 2015 年 快 报 数 预 算 数 增 减 % 一 税 收 收 入 增 值 税 ( 含 改 征 增 值 税 )

投影片 1

10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD

四、實務實習課程之實習工作日誌(請貼上掃描檔)

Microsoft Word - 第01章new.doc

<4D F736F F D20312D3120B9ABBFAAD7AAC8C3CBB5C3F7CAE92D2DD5C6B9F1C8EDBCFEA3A8D0DEB8C4B0E6A3A9>

Microsoft PowerPoint - 遊戲企劃

公司宣传册定稿-横版文件

Chapter 3 Camera Raw Step negative clarity +25 ] P / Step 4 0 ( 下一頁 ) Camera Raw Chapter 3 089

Bootstrap 1 % (WWW) APP ios Android AppStore GooglePlay APP RWD ( Respon

利用得实平台进行网络课程建设

新竹高中105學年度第1學期第2次教師甄選簡章

目 录 刊 首 语 读 者 朋 友 大 家 好! 金 秋 十 月, 秋 风 送 爽 第 40 期 卓 望 杂 志 带 着 墨 香 到 达 了 您 的 手 中, 在 这 里 我 先 为 您 做 一 个 导 读 卓 望 杂 志 季 刊 这 期 的 高 端 访 谈 栏 目 刊 登 了 四 篇 专 访, 嘉

Mocat

目 录 简 介.3 ` 体 系 结 构...4 数 据 层...5 数 据 连 接 器...6 Tableau Server 组 件...7 网 关 / 负 载 平 衡 器...8 客 户 端 :Web 浏 览 器 和 移 动 应 用 程 序...8 客 户 端 :Tableau Desktop..

Microsoft Word PHPCh15.docx

final

互動網頁技術系列課程 HTML與CSS網站基礎設計 [12pt]

p.2 1 <HTML> 2 3 <HEAD> 4 <TITLE> </TITLE> 5 </HEAD> 6 7 <BODY> 8 <H3><B> </B></H3> 9 <H4><I> </I></H4> 10 </BODY> </HTML> 1. HTML 1. 2.

中国网页游戏市场研究报告

Microsoft Word 样章.dot

<img>


97

Microsoft Word _ doc

skta00013_read.pdf

投影片 1



可 Web 编程的NativeUI 设计与实现

版权页.indd

Asprain论坛的特色

29 知 識 管 理 c.1 1 樓 新 到 館 圖 書 區 30 知 識 管 理 c.2 1 樓 新 到 館 圖 書 區 31 編 劇 與 腳 本 設 計

二 智 慧 財 產 權 宣 導 資 料 三 世 新 大 學 導 師 制 度 實 施 辦 法..37 四 導 生 ( 守 護 神 ) 系 統 使 用 面 說 明 世 新 大 學 推 動 紫 錐 花 運 動 宣 導 資 料. 41 世 新 大 學 無 菸 校 園 實 施 辦

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

02 2 成立 Facebook 粉絲專頁 Facebook Facebook Facebook 1, Facebook Facebook 1 Facebook 2-21

灰狐就是协作 collaboration for everyone! 灰狐 Huihoo Huihoo 是个社区, 一个协作与分享的社区, 我们关注自由 开源软件


1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

bootstrap - 2

xvi 10 Web Web iphone canvas SVG Safari 4.0 Web worker 2009 canvas iphone Chrome Opera Firefox Internet Explorer Android Web HTML CSS DOM SVG XHR HTML

2

<4D F736F F D20B1E7BAD1A9FA2EAA4CABDBA7C22EBC42A87CC6462EC0B9A767AE622EC1E9A7BBAB475F6F6B5F2E646F63>

HeLinHong

声 明 本 公 司 及 全 体 董 事 监 事 高 级 管 理 人 员 承 诺 不 存 在 任 何 虚 假 记 载 误 导 性 陈 述 或 重 大 遗 漏, 并 对 其 真 实 性 准 确 性 完 整 性 承 担 个 别 和 连 带 的 法 律 责 任 本 公 司 负 责 人 和 主 管 会 计 工

Transcription:

可選擇畫筆粗細 顏色的 網頁版繪圖介面 本篇將利用 HTML5 的 canvas 來建立繪圖程式, 實作 畫筆模式 / 橡皮擦模式選擇 線條粗細的 3 階段 ( 粗. 中. 細 ) 設定 從 10 個顏色中選擇線條顏色 等功能, 藉此學習 canvas 的基本操作及事件處置 製作. 撰文 / 小原暢 ( 面白法人 KAYAC) 使用技巧 canvas 元素 JavaScript 製作要點活用 data 屬性的簡單實作使用 jquery 的 delegate() 之事件處置針對圖示等圖像, 使用 SVG 的技巧 支援瀏覽器 / 智慧型手機 IE 9 以上 Firefox 26 以上 Safari 7 以上 Chrome 32 以上 使用的外掛程式 jquery(2.0.3) http://code.jquery.com/jquery-2.0.3.min.js

滑鼠事件的處置 01 首先, 思考一下用滑鼠畫線的操作動作, 為此必須處理 : mousedown mousemove mouseup 等 3 個事件 各個事件中進行的處理如表 01-1 所示 一開始加入的事件處理器只有 mousedown, mousemove mouseup 的事件處理器則是視需要加入 / 刪除 01-1 滑鼠事件種類事件 mousedown mousemove mouseup 內容 初始化路徑 設定路徑起點 加入 mousemove 事件處理器 加入 mouseup 事件處理器 加入路徑 & 沿著路徑描繪 刪除 mousemove 事件處理器 刪除 mouseup 事件處理器 02 mousedown 事件處理器中所進行的處理如下 初始化路徑設定路徑起點加入 mousemove 事件處理器加入 mouseup 事件處理器程式碼如 02-1 所示 首先是以 begingpath() 初始化路徑 在這之後, 以 moveto() 將路徑的起點設定為現在的滑鼠座標 滑鼠的 x 座標 y 座標在這次的情況下是以 evt.pagex, evt.pagey 取得 再來, 加入 mousemove mouseup 事件處理器 02-1 mousedown 事件的處理 (app.js) function handlemousedown(evt) { ctx.beginpath(); ctx.moveto(evt.pagex, evt.pagey); $(document).bind('mousemove', handlemousemove); $(document).bind('mouseup', handlemouseup);

Chapter 2 API 及 Web 應用程式 03 mousemove 事件處理器中進行的處理如下 加入路徑描繪加入之路徑 ( 線段 ) 程式碼如 03-1 所示 03-1 mousemove 事件的處理 (app.js) function handlemousemove(evt) { ctx.lineto(evt.pagex, evt.pagey); ctx.stroke(); 從路徑的起點 ( 或目前為止建立好的路徑終點 ) 開始描繪到現在滑鼠座標為止的線段 請注意, 只執 行 lineto() 不會描繪線條, 要執行 stroke() 才會開始描繪線條 04 04-2 實作好滑鼠事件的狀態 mouseup 事件處理器中進行的處理如下 刪除 mousemove 事件處理器刪除 mouseup 事件處理器程式碼如 04-1 所示 綜合以上步驟, 就會顯示圖 04-2 的樣子 04-1 mouseup 事件的處理 (app.js) function handlemouseup() { $(document).unbind('mousemove', handlemousemove); $(document).unbind('mouseup', handlemouseup); 選擇線條粗細 顏色 05 接著, 來實作變更線條粗細及顏色時的處理 在此利用 data 屬性, 就可以對 DOM 元素加上任意的資料 ( 字串 ) 首先, 準備 05-1 的 HTML 在各按鈕的 div 元素設定 data-size 屬性, 值分別設為 small medium large, 這個最後會附加上選擇線條粗細的功能

05-1 各按鈕的 div 元素 (index.html) <div class="btns"> <div class="btn size small" data-size="small"></div> <div class="btn size medium" data-size="medium"></div> <div class="btn size large" data-size="large"></div> </div> 06 程式 06-1 展示了 JavaScript 程式碼 在 click 事件處理器中, 取得被按下之元素的 data-size 屬性值, 從取得的值來判別哪個按鈕被按下 ( 亦即, 哪個尺寸被選擇 ) 這個方法與 jquery 的 delegate() 併用時特別方便 使用 delegate(), 就可以削減事件處理器的數量, 效能會比較好 反之, 不使用 delegate() 而只準備按鈕數量的事件處理器的話, 程式碼的量會增加而影響效能 06-1 透過使用者的操作動態變更線條粗細 function handlesizeclick() { var size = $(this).attr('data-size'); switch (size) { case 'small' : ctx.linewidth = 5; case 'medium' : ctx.linewidth = 10; case 'large' : ctx.linewidth = 20; default : $(document).delegate('.btn.size', 'click', handlesizeclick); 07 接下來, 我們加入使目前選擇的按鈕醒目顯示的處理 在 JavaScript 中, 當按鈕被按下時, 將按鈕的 data-size 屬性值設定於 body 的資料屬性 data-size 中 07-1 而在 CSS 中, 配合 body 的 data-size 屬性值改變各按鈕的顯示 07-2

Chapter 2 API 及 Web 應用程式 07-1 判別哪個按鈕被按下 function handlesizeclick() { var size = $(this).data('size'); switch (size) { case 'small' : ctx.linewidth = 5; 省略 default : $(document.body).attr('data-size', size); $(document).delegate('.btn.size', 'click', handlesizeclick); 07-2 使被選擇的按鈕醒目顯示 body[data-size="small"], body[data-size="medium"], body[data-size="large"] { /* 醒目顯示的樣式設定 */ 08-1 將變更線條尺寸的處理分離出來 08 function handlesizeclick() { 本步驟著眼於 handleclick 內的處理, 進行的處理大致是以下 3 個 1 取得 data-size 屬性 2 對應取得之資料屬性 data-size, 變更描繪的線條屬性 3 對 body 標籤設定資料屬性 data-size, 使被選擇的按鈕醒目顯示 1 為事件處理, 而 2 和 3 則是變更線條尺寸的邏輯處理 為了提高可維護性, 將它們分離 08-1 setsize($(this).data('size')); function setsize(size) { switch (size) { case 'small' : ctx.linewidth = 5; 省略 default : $(document.body).attr('data-size', size); $(document).delegate('.btn.size', 'click', handlesizeclick);

09 接著是變更線條尺寸的部份, 藉此可進行如 09-1 的初始化處理 到這邊我們來復習一下 利用資料屬性達成簡單的實作 使事件處理器的數量最小化, 提升效能 從事件處理器中將邏輯處理分離出來, 提升可維護性 09-1 初始化處理的例子 setsize('small'); 10 變更線條顏色也一樣 程式碼如 10-1 10-2 所示 10-1 與變更線條顏色的按鈕相關連 (index.html) <div class="palette"> <div class="color" style="background-color: #000;" data-color="#000"></div> <div class="color" style="background-color: #fff;" data-color="#fff"></div> 省略 <div class="color" style="background-color: #f90;" data-color="#f90"></div> <div class="color" style="background-color: #f00;" data-color="#f00"></div> </div> 10-2 改變線條顏色 (JavaScript) function handlecolorclick() { setcolor($(this).data('color')); function setcolor(color) { ctx.strokestyle = color; $(document).delegate('.btn.color', 'click', handlecolorclick); setcolor('#000');