發表文章

javascript 自動捲動至選取項目

圖片
當我們在瀏覽項目時,無論是條列式或圖像式,選取的下一個目標跑出畫面時,使用者可能會期待系統自動捲動到某個恰當的位置以繼續瀏覽,於是有了這個計算及需求,跟各位分享一下。 首先,我的系統架構是這樣,使用者可以透過左右鍵好移動到前一個或下一個目標,然後先假設螢幕的高度是100,每個項目的高度是28,如下圖: 再來,透過jQuery的 $(window).scrollTop()可以取得現在畫面的最上緣是在整個垂直方向的甚麼位置,以上圖來說,一開始畫面是紅框範圍,值為0。 接著,透過 $selectedItem.offset().top 可以取得選取項目的最上緣所在垂直方向位置。以B項目為例,它的位置是88。 然後,每當我們選取到一個新目標時,都要判斷它的位置是不是在合理的瀏覽範圍內,以我的需求來說,會希望整顆圖像在畫面裡,也就是說,下一個新的目標,它的位置至少要在 0 (畫面當下位置) + 100 (螢幕高度) - 28 (項目高度) = 72 裡。 那來到現在的範例動作,當我們從A項目往下一個B項目移動時,B的位置是88 > 72,所以將畫面捲動。我希望畫面捲動成藍色框的位置,讓B離最上緣還稍微有個8的距離空間,所以我透過 $(window).scrollTop(B的位置 - 8) 來捲動。 以上,是簡化的的範例,那再來,以下分享我在工作上實際的需求。 系統的上方有個漂浮的header,下面也有個漂浮的footer,一併列入計算。 當我往前面的項目移動時,我希望捲動頁面成新的目標在畫面最上排;而當我往後面項目移動時,希望捲動成新的目標在畫面最下排,程式碼如下: // 當選取Item超出畫面,做適當捲動 var headHeight = $('#pageHeader').outerHeight(), footHeight = $('#toolbar_0').outerHeight(), $window = $(window), winHeight = $window.height(), wi

javascript 工作排程管理器

在程式上,有時候會遇到這樣的需求:某種工作,使用者可以一次大量地觸發它,或者不斷地增加工作進來,而基於效率及伺服器的能力管理,我們必須控制只有某些數量的工作可以運行,其他的排隊,我稱之為工作排程。 比如下載某些檔案,使用者點了10個下載,但我們程式控制同時間最多只有3個在進行。 以下是我用javascript寫的範例: <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><> add 1 task add 10 tasks Cancel All ◎ 新增的 Task 隨機賦予 1 ~ 10 秒執行時間 ◎ 點擊 Waiting 或 Working 的 Task 可取消該 Task。 Waiting: Working: (Limit: 3) Finished: <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><> 範例下載連結: https://drive.google.com/file/d/0B0kC-urN3g_jWnN0MkRRejcxbjA/view?usp=sharing

javascript - 樂透 lottery - 號碼產生器

圖片
本文想要分享,如何用javascript制作一個抽籤程式,然後是以樂透號碼為範例。 一、 首先,我們必須要知道如何使用亂數產生器,在javascript裡面 Math.random() 可以取得一個介於 0 ~ 1 (不包含1) 的浮點數亂數,而在實際使用上我們希望得到的是某個正整數,也就是編號幾號的東西,所以我們得動點手腳運算。 比如現在有一個陣列 arr[10],裡面放著 arr['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] 十樣東西,我們要挑出一個,所以我們希望得到的亂數是 arr 的 index: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 其中一個號碼,於是做這樣的運算 Math.floor(Math.random() * 10) ,比如 0.452 * 10 = 4.52 去掉小數位數得到 4,比如 0.999 * 10 = 9.99 去掉小數位數得到 9。 * 10 是因為有10個選項,而 Math.floor 是去掉小數位數只取整數部份的涵式。 這樣的運算會使得每個東西的機會均等嗎? 當亂數 0 ~ 0.099... * 10 得到 0 ~ 0.99... 取 0 當亂數 0.1 ~ 0.199... * 10 得到 1 ~ 1.99... 取 1 當亂數 0.2 ~ 0.299... * 10 得到 2 ~ 2.99... 取 2 當亂數 0.3 ~ 0.399... * 10 得到 3 ~ 3.99... 取 3 當亂數 0.4 ~ 0.499... * 10 得到 4 ~ 4.99... 取 4 當亂數 0.5 ~ 0.599... * 10 得到 5 ~ 5.99... 取 5 當亂數 0.6 ~ 0.699... * 10 得到 6 ~ 6.99... 取 6 當亂數 0.7 ~ 0.799... * 10 得到 7 ~ 7.99... 取 7 當亂數 0.8 ~ 0.899... * 10 得到 8 ~ 8.99... 取 8 當亂數 0.9 ~ 0.999... * 10

自己設計讓網頁支援多國語系的架構

首先我們要把問題釐清,支援多國語系最基本的概念就是,畫面上的文字要被替換。 於是我們先建立一個用來被替換的多國語系字典檔 這邊先簡單用物件來當範例 // 多國語系文字庫 var gLib = { "0000": { "CHT": "Traditional Chinese (繁體中文)", "ENU": "English (English)", "KOR": "Korean (한국어)" }, "0001": { "CHT": "語言", "ENU": "Language", "KOR": "언어" }, "0002": { "CHT": "選擇語言:", "ENU": "Select your language:", "KOR": "언어를 선택하세요 :" } } 有了多國語系文字庫之後,我想要建立一個管理器來存取這個文字庫,我希望這個管理器僅保有我指定語言的部分,並且提供取用的 get function // 文字庫管理器 var gTxtLib = { resource: undefined, set: function(lib, lang) { var result = undefined; if (typeof lib == 'object') { result = {}; for (var id in lib) { var txtObj = lib[id]; result[id] = (lang in txtObj ? txtObj[lang] : undefined); } } this.resource = result; }, has

javascript milliseconds to time format

// 換算ms時間成一般時間格式 function getTimeString(total_ms) { var ms = 0, sec = 0, min = 0, hour = 0; ms = total_ms % 1000; sec = parseInt((total_ms - ms) / 1000); if (sec != 0) min = Math.floor(sec / 60); if (min != 0) hour = Math.floor(min / 60); return (hour > 0 ? formatNumberLength(hour, 2) + ":" : "") + (min > 0 ? formatNumberLength(min % 60, 2) + ":" : "") + (sec > 0 ? formatNumberLength(sec % 60, 2) : "00") + "." + formatNumberLength(ms, 3); } // 將數值轉成指定長度的字串 function formatNumberLength(oNumber, oLength) { var str = parseInt(oNumber).toString(); while(str.length < oLength) { str = '0' + str; } return str; } <><> 結果範例 <><> ms: Result:

PhoneGap (2.9.0) - Example - Android

圖片
關於什麼是PhoneGap,小弟覺得網路資源很多可以參考,所以在這邊引用維基百科的介紹。 http://zh.wikipedia.org/wiki/Adobe_PhoneGap 那大致上之所以有PhoneGap是因為,目前手機開發App時得選邊站,Android系統的App得用Android SDK,以JAVA技術為底,而iOS系統的App以Objective-C開發。那可不可以有一個統一的方式呢?這樣我就不用費盡心力學兩種技術,一個程式寫兩遍,兩邊可能還不太一樣。於是有人想出來,讓兩邊的開發架構內透過瀏覽器讀取網頁 ( HTML5 + CSS3 + javascript ) 的方式來當App的畫面,以達到通用。 OK~ 注意到了,我上面說的是"兩邊的開發架構內",所以PhoneGap只是原本開發專案內的一個新增的函式庫,可以這麼想,所以核心還是在原本開發專案。那麼網頁沒有辦法存取Local file呀,也沒有辦法使用手機的照相機呀,所以PhoneGap建立了這個橋樑,讓你可以使用PhoneGap提供的API,或者自己寫的API,以這樣的方式: javascript ←→ (SDK + PhoneGap) ←→ Mobile Device 來達到。 因此,一但你要使用的東西網頁無法完成,PhoneGap也沒有提供,那麼你就得自己寫API,以Native Code來做完。 總結,PhoneGap不是一個全新的開發體系,而是建構在各開發架構內的函式庫,引用網頁技術來完成一些事情,以減少你跨平台時需要重寫的部分。 那麼接下來我在Windows平台下,使用Eclipse、Android SDK、PhoneGap 2.9.0來從頭做一次給各位看。 首先,如果你沒有以上這些東西,可以到下面這些網址抓。 Android ADT ( Eclipse + Android SDK + Mobile 模擬器 ): http://developer.android.com/sdk/index.html PhoneGap 2.9.0: http://phonegap.com/install/ ( 這邊省略開發環境的設定,如有需要請自行Google學習 ) 首先第一步是使用 Ecl

HTML - jQuery - Pagination - xPager

圖片
前陣子因為工作上的需要,參考一些網路資源,做了一個自己的 jQuery Pagination 元件。 這個元件的優點在於: 1. 可以在初始化時不給資料總數。 2. 可以動態變更每頁資料筆數。 3. 可以直接跳到指定的頁數。 4. 會顯示瀏覽資訊。 這是範例圖: 下載路徑 (內含範例): https://drive.google.com/file/d/0B0kC-urN3g_jYmRBejBzX1hlS3M/edit?usp=sharing