검색결과 리스트
로그의 노트에 해당되는 글 212건
- 2012.06.24 [번역] 사용자 인터페이스 설계의 원리
- 2012.06.12 장소 표현
- 2012.05.21 시간정리 (1)
- 2012.05.19 Ignite 분당에 참석하고 나서... (4)
- 2012.03.20 Preposition Of Time (2)
- 2012.03.15 Preposition Of Place
- 2012.03.14 [마인드맵] My House
- 2012.03.11 HTML5 Canvas API
- 2012.03.06 [마인드맵] Wedding
- 2012.03.05 [마인드맵]C언어의 역사
글
[번역] 사용자 인터페이스 설계의 원리
www.developer.com 사이트에 게시된 훌륭한 사용자 인터페이스 설계의 8가지 원리에 대한 글을 번역해보았습니다.
애플리케이션을 개발하고, 마케팅하고, 시장의 반응에 실망에 본적 있으세요?
수많은 시간과 돈을 마케팅에 투자했더라도 눈에 잘 들어오지 않는, 혼란스러운, 불편한 사용자 인터페이스를 극복할 순 없습니다.
사용자 인터페이스가 애플리케이션을 살릴 수도, 망칠 수도 있습니다. 이점이 애플과 그들을 모방하려고 애쓰는 타 회사들을 구별
짓는 것입니다. 모든 사람이 애플처럼 될수는 없지만, 사용자 우호적이고 매력적이고, 이목을 끄면서 단순한 인터페이스를 위해
열망할 수 있습니다. 다음은 당신의 사용자 인터페이스를 놀랍게 만들기 위해 따라야 하는 몇가지 최선의 방법입니다.
1. 사용자를 이해하라. (Understand Your User)
사용자들을 설득시키고자 한다면, 사용자와 밀접해질 필요가 있다. 당신의 사용자처럼 살고, 당신의 사용자처럼 생각하고
당신의 사용자처럼 사용해라. "내 사용자는 누구인가?" 부터 시작해서 "그들이 필요로 하는 것?" 을 생각하라. 거기서 부터 일을
진행시켜라. 이 필수적인 규칙을 간과한다면 인터페이스는 컨셉부터 비운을 맞이하게 된다.
깜짝 놀랍거나, 엉클어져 있는 디자인을 만들기위해 에너지를 집중하지 마라. 대신 당신의 사용자의 목저을 달성하는데만 집중하라
당신의 사용자를 파악하는 것을 명심하고 그 다음에는 그들처럼 생각하기 시작하라.
2. 더 적은 것이 더 많은 것이다. (Less is More)
사용자 인터페이스를 설계할 때 핵심은 단순함이다. 당신의 사용자 인터페이스에 블링블링한 효과를 추가하기 전에
당신 자신에게 "이부분은 반드시 필요한 것인가" 또는 "이부분이 인터페이스에서 실제적인 역할을 하는가?"라고 물어라.
가장 좋은 사용자 인터페이스 설계는 가장 단순하다. 나는 종종 사용자 인터페이스를 설계할 때 나 자신에 이렇게 묻는다.
"우리 할머니도 이것을 사용할 수 있으실까?" 당신의 할아버지와 헐머니를 테스트 케이스로 사용한다면,
그것이 실패하지 않는 일반적인 규칙이 될 것이다.
3. 컬러를 현명하게 사용하라. (Use Color Wisely)
색은 특정 요소에 주의를 끌기 위한 명백한 방법이다. 특별히 어떤 행동을 하도록 유도하게 설계되어졌다.
빨간색은 그런 색의 좋은 예인데, 빨강은 ""지금 다운로드, 지금 재생, 여기를 클릭하세요" 와 같이 어떤 행동을 유도하고,
주의를 집중시킨다. 하지만 반대로, 빨강은 위험의 의미와 연관되기 때문에 너무 과도하게 사용하지 말아라.
더 따뜻한 톤은 이목을 끄는 자연광을 가지고 있다. 파란색은 일반적으로 안전하고 건강한 느낌을 들게한다. 또한
당신이 사용자가 인터페이스에서 편안한 느낌을 상기하게 한다.
4. 일관성을 유지하라. (Be Consistent)
일관성은 필수적이다. 사용자에게 안정감을 느끼께 해주기 때문이다. 일관성은 폰트, 레이아웃에서 부터 언어와 테마에
이르기까지 모든 것에 해당된다. 무엇인가를 마스터하게 되면 안정감을 느끼게 해야한다. 그 과정을 여러번 반복하게 되고
그러면 규칙을 변화시키는 인터페이스에 적응할 필요가 없어진다.
5. 처음 사용하는 사용자들을 도우라 .(Assist First Time Users)
처음 사용하는 고객들에게 how-to 비디오를 준다거나, 헬프 데스크로 문의해라는 말대신에, 필요할때 가이드할 수있는 지침을
제공하라. 이것은 당신의 앱의 주요 특징들을 사용자에게 에스코드하는 GPS 나 여행 가이드와 같은 역할을 한다.
WalkMe의 walkthroughs 와 같은 거슬리지 않는 장치들이 복잡한 설명으로 부터 당신의 사이트를 깔끔하게 유지해 주고
당신 사용자들의 만족감을 증진시켜줄 것이다.
6. 당신의 사용자가 달성한 것을 지식화하라.
당신의 사용자가 당신 인테페이스를 마스터했다는 것을 당신에게 알리게 만들고, 그들을 보상하고 그리고 그들이 달성한 것을
지식화하라. 더이상 복잡한 일들을 벌이지 말아라. 사용자들을 키보드 단축키를 사용하게 하고, 상대적으로 복잡한 부분의
인터페이스에 익숙해지게 만들어라.
7. 테스트하고 반복하라.
UI 를 계속해서 변경해서 사용자들이 소외감을 느끼게 하는 것은 결코 바람직하지 않지만, 5년 동안 똑같은 UI를
사용하는 것 또한 당신의 경쟁자들에게 당신을 뒤쳐지게 만든다. 모든사람이 웹사이트의 특정 디자인이 마음에 들수도 있지만
어떤 것들은 수정되고, 업데이트 되고, 개선될 필요가 있다.
이런한 것들을 변화시키면서, 사용자들의 반응을 테스트 해라. 애플리케이션의 사용성을 해치는 변화를 만들고 싶지 않지 때문에..
8. 포기하지 마라.
UI 디자인은 일부는 예술, 일부는 과학의 영역에 속한다. 이런 모든 변수들과 함께, 사용자 인터페이스를 디자인을 할 때
많은 난관에 직면하게 되고, 첫번째, 두번째, 세번째, 심지어 네번째 허들에서 조차 비틀거리게 될것이다. 하지만 이것이
당신이 프로젝트를 그만두어야 한다는 것을 의미하진 않는다. 로마는 하루만에 지어지지 않았다.
UI 역시 하루만에 만들어지지 않는다.
당신의 사용자 인터페이스가 처음에는 100% 당신의 마음에 들지는 않을 것이다. 그렇지 않다면, 그렇게 하는 공식좀
우리에게 보내주라. 당신의 첫번째 시도에 사용자들이 우호적이지 않고, 심미적이지 않고, 당신이 바라는 이목을 끄는
인터페이스가 아니더라도 실망하지 말라. 당신의 UI를 개선하면서 이러한 원리들을 적용하여 개선한다면 당신의 앱은
성공의 길로에 놓이게 될 것이다.
'아이폰' 카테고리의 다른 글
| [iPhone] UIView 애니메이션과 코어 애니메이션(CoreAnimation) (0) | 2013.01.23 |
|---|---|
| [Mask 레이어 활용] 이미지 일부만 보여주기 (2) | 2013.01.22 |
| [번역] 사용자 인터페이스 설계의 원리 (0) | 2012.06.24 |
| 수동으로 UI 컨트롤에 이벤트 전달 (0) | 2011.11.13 |
| NSNotification (1) | 2011.04.29 |
| 푸시 메시지 포맷 (0) | 2011.04.07 |
설정
트랙백
댓글
글
장소 표현
Describing places in the city
what is near the cafe?
what is across from the cafe?
what is next to the cafe?
what is past the cafe?
what is behind the cafe?
cafe and bank are flanking academy: 카페와 은행은 학원을 끼고 있다.
flanking 이라는 표현은 군대에서 자주 사용되는 용어. surrounded 라는 의미로 두 건물이 한 건물을 끼고 있을 경우 사용된다고 함.
동일한 의미지만
academy is between cafe and bank : 학원은 카페와 은행 사이에 있다.
와 같이 표현할 수 있다.
pub : bar와 동일한 의미.
we can use as land mark like...subway station, department store, street, building, park, river
ex) there are many apartments around cafe street.
'학습로그 > 영어' 카테고리의 다른 글
| 장소 표현 (0) | 2012.06.12 |
|---|---|
| Preposition Of Time (2) | 2012.03.20 |
| Preposition Of Place (0) | 2012.03.15 |
| [마인드맵] My House (0) | 2012.03.14 |
| [마인드맵] Wedding (0) | 2012.03.06 |
| 영어를 빨리 배우는 방법 (0) | 2011.04.12 |
설정
트랙백
댓글
글
시간정리
시간을 관리하려고 하지말고, 정리해보자.
시간이라는 한정적인 자원을 활용해 원하는 결과를 얻기 위해서는 효과적인 활동을 선택하고 집중해야 한다.
시간 정리를 잘하기 위해서는, 왜 일하는지 그리고 무엇을 위해 일하는지에 대해 답할 수 있어야 한다.
시간정리 => 얻을 수 있는 결과는?
1) 마음의 평화
2) 일과 삶의 균형
시간정리 1단계) "인생에서 가장 소중한 것"에 대한 발견
1) 사명 - 인생의 의미와 목표
2) 비전 - 실행 가능한 계획
3) 가치 - 자신의 행동을 지배하고, 사명과 비전을 결정해 줄수 있는 기반
지배가치를 발견했다면, 일상생활에서 지배가치에 따라 행동해보자.
"행동하는 가치만이 의미 있다"
시간정리 2단계) 시간 패턴을 파악하자.
시간경영 - 기록, 관리, 통합하는 3단계 필요
재테크의 기본은 가계부를 쓰는 것이듯, 시간 정리의 기본은 시간 가계부를 쓰는 것!
"시간을 낭비하는 사람은 수입도 늘지 않고, 자기 시간도 가질 수 없다"
1) 고정시간 먼저 기록하기
- 업무일지를 틈틈히 기록하기
2) 업무 소요시간 파악하기
- sw, 수기든 일주일 단위로 작성
3) 시간조망 - 시간을 얼마나 넓은 안목으로 바라보느냐
- 10년, 1년, 한달, 일주일, 하루, 30분 단위로 할일이 차곡차곡 정리되고, 바라볼 수 있어야 한다.
- 최소 30분 단위로 시간을 기록하는 습관
4) 할일과 하지 않을 일을 정하라
- 우선순위와 스케줄링
- 계획을 수립하는 것은 성공과 실패의 분기점이다. "폴 마이어"
5) 방해를 차단하라
- 할일중에서 불필요한 일 제거. 불필요 한 일이란 방해가 되거나, 효과적이지 않은 일
"효과적, 효율적 - 목표를 이루는게 중요한가? 빨리 이루는게 중요한가?"
6) 자신을 위한 시간을 마련하라
피터 드러커 - "결과를 위한 경영" - 우선순위 결정을 위한 원칙
(1) 과거가 아닌 미래를 선택할 것
(2) 문제가 아니라 기회에 초점을 맞출 것
(3) 평범한 것이 아닌 독자성을 가질 것
(4) 무난하며 쉬운것이 아니라 변혁을 가져다 주는 것
스티븐 코비박사 - "성공하는 사람들의 7가지 습관"
7) 심신을 단련하라.
- 성공한 사람들은 하루 2시간 "신체적, 정신적, 사회적, 영적" 감정적인 균형을 유지하기 위해 투자한다고 함.
- 현재 내 삶에서 부족한 부분...기도와
1) 주어진 일을 1분이내 끝낼 수 있다면, 절대 미루지 않기
2) 매일 잠들기 전 10분은 정리정돈하는 시간을 가질 것
바꿔야 할 습관)
- 해야할 일을 내일로 미루는 습관
- 지금 하는 일에 집중하지 못하는 습관
- 여러가지 일을 한꺼번에 처리하는 습관
- 멍 때리는 습관
* 나쁜 습관을 없애기 보다, 그것을 대체할 수 있는 좋은 습관 만들기
- 습관이 몸에 배기 위해서는
새로운 회로가 만들엊는데 3주, 반사적으로 행동하는데 66일, 완전히 자기습관으로 만드는데 100일이 걸림.
* 집중하는 습관을 길러주는 타이머
- 뽀모도로 테크닉 : 25분동안 한가지 일에만 집중. 5분동안 쉬기
- 할일 정리 15분
* 실수 일기를 쓰는 시간 15분
- 스티브 잡스 이야기
"나의 인생을 위해 시간을 썼는가?"
"오늘도 내가 보낸 시간에 보람과 기쁨을 느끼는가?"
"하루를 마무리 할때 시간을 평가하는 기준"
* 저녁시간에 15분 - 하루동안 일어난 일 정리, 기억하고 싶은일, 반성하고 싶은일 기록
'생각로그' 카테고리의 다른 글
| 서른살에 알았더라면 좋았을 것들 (0) | 2014.04.24 |
|---|---|
| [시] 지금 하십시오 (0) | 2014.01.09 |
| 시간정리 (1) | 2012.05.21 |
| Ignite 분당에 참석하고 나서... (4) | 2012.05.19 |
| [마인드맵]C언어의 역사 (0) | 2012.03.05 |
| 성공하는 말하기 (0) | 2012.03.01 |
설정
트랙백
댓글
글
Ignite 분당에 참석하고 나서...
Ignite 점화한다는 뜻의 이그나이트는 컴퓨터 서적 출판사 OReilly에서 처음 시작된 지식 나눔 행사로
현재 세계 100여개 이상의 도시에서 개최되고 있으며, 발표자와 청중, 자원봉사자들의 자발적인 참여로
이루어지고 있는 행사이다. 20장의 슬라이드를 5초 마다 한장씩 자동으로 넘기며, 총 5분에 걸쳐 발표하는 방식으로
자신의 소중한 경험, 지식, 이야기 등을 다른사람과 함게 나누는 장이다.
분당 구청에서 열린 제1회 Ignite 분당...갈까 말까 고민 끝에 참석했는데 행사가 끝난 후 "탁월한 선택이었다" 고 생각할만큼
너무 재미있는 시간이었다. 14분의 연사님 발표 모두 훌륭하였지만...그 중에 특히 나에게 감명을 주었던 몇분의 내용을
적어보았다...제 2회는 NHN 본사 건물 Connect Hall에서 열린다고 한다. 벌써부터 기대가...
* 나 혼자 만드는 레이버테인먼트 - 안정희
우리는 하루의 대부분의 시간을 직장에서 보내게 된다. 이러한 시간을 괴롭고 지루하게 느끼며 보내야 하는가?
하여...일에서 재미를 추구하자를 슬로건으로 하는 레이버테인먼트라는 개념에 관심을 가지게 되셨다는 연사님
그리고 "자신이 한 모든 일을 다른 사람들을 위해 공유한다" 는 목표를 세웠다.
내가 겪었던 수많은 실수들을 사람들이 되풀이 하지 않고… 가는 길에 이정표가 되기를 소망하면서…
"아무것도 하지 않으면 아무것도 일어나지 않는다"
" 시간이 없는 것이 아니라 마음이 없는 것이다" - 류비셰프
* 인문대생 in IT 기업. - 이지은
- 공대가 싫어 인문계로 진학했다가 결국에 IT 관련 기업에서 관련 업무를 하게됐다는 연사님...
서버와 클라이언트, 서비스의 개념을 재미난 비유로 풀어낸 점이 인상적이었다.
(아버지와 어머니, 아들의 비유였나...? 도대체 이런 상상은 어떻게 하지!)
마지막으로 개발자님들에게 외치는 한마디…"쉬운 언어로 이야기 해주세요~" 는 마치 순도 100% 개발자틱한
나에게 쇠망치로 때리는 듯한 충격이었다. 반성하자!
* 아이디어를 찾아 여행하는 삽질러를 위한 안내서 - 이민구
- 어린 나이에도 불구하고, 대담한 자세로 발표를 하고 창업전선에 나서 스타트업을 운영하는 발표자가 너무나
멋있게 보였다. 일상에서 아이디어를 찾기 위해 제시하는 3가지 방법은 다음과 같다.
1. 불편한것 고치기
2. 다르게 생각하기
3. 사람 만나기
그중에서도 가장 파워풀 한 것은 3번이라고 이야기한다. 다양한 사람들을 만나고 그들과 생각을 나누는 과정에서
가장 신선한 아이디어를 찾을 수 있었다고한다. 또 하나 강조했던 것은…아이디어를 찾았다면
너무 크지 않게 부풀리지 않고…가능한 한 빨리 구현하여 삽질하라! 는 것!
* 입양 - 세상의 모든 아이는 가족을 가질 권리가 있다. - 조규민
- 입양한 아이들을 위해, 자신의 친자를 낳지 않고 양자들을 사랑으로 키우는 연사님의 모습이 너무 멋있었다.
가장 인상이 남는 것은…이웃에서 입양을 했다고 했을 때... 더이상 어려운 결정을 내리셨네요" 라고 하지 말아라.
당신이 할 말은 방긋 웃으며...
축하해요
'생각로그' 카테고리의 다른 글
| [시] 지금 하십시오 (0) | 2014.01.09 |
|---|---|
| 시간정리 (1) | 2012.05.21 |
| Ignite 분당에 참석하고 나서... (4) | 2012.05.19 |
| [마인드맵]C언어의 역사 (0) | 2012.03.05 |
| 성공하는 말하기 (0) | 2012.03.01 |
| 호감주는 말하기 (0) | 2012.03.01 |
설정
트랙백
댓글
-
안녕하세요~ 혹시 이그나이트 행사 2회는 언제쯤 하는지 알수 있을까요.?
아니면 관련된 정보를 알수 있는 사이트 라도 부탁 드립니다 (_ _ //
글
Preposition Of Time
출처: www.english.com
He has coffee in the morning, tea in the afternoon and wine in the evening.
I work during the morning/afternoon/evening/day/night.
Let's meet at 6 pm.
The clock strikes twelve at midday/noon/midnight.
the condemned man was shot at sunrise/dawn.
The street lights come on at sunset/dusk.
We can see the stars at night.
'학습로그 > 영어' 카테고리의 다른 글
| 장소 표현 (0) | 2012.06.12 |
|---|---|
| Preposition Of Time (2) | 2012.03.20 |
| Preposition Of Place (0) | 2012.03.15 |
| [마인드맵] My House (0) | 2012.03.14 |
| [마인드맵] Wedding (0) | 2012.03.06 |
| 영어를 빨리 배우는 방법 (0) | 2011.04.12 |
설정
트랙백
댓글
글
Preposition Of Place
source: www.englishclub.com
There is a cup on the table.
The Helicopter hovered above the house.
The Police placed a sheet over the body.
He Stood in front of the door and rang the bell.
Ram sat beside Tara in the cinema.
A small stream runs below that bridge.
He put the key under the doormat.
He put his hands behind his back.
It's under the desk.
It's next to the bed.
It's on the right of the picture.
It's on the left of the coatrack.
It's on the right next to the picture.
'학습로그 > 영어' 카테고리의 다른 글
| 장소 표현 (0) | 2012.06.12 |
|---|---|
| Preposition Of Time (2) | 2012.03.20 |
| Preposition Of Place (0) | 2012.03.15 |
| [마인드맵] My House (0) | 2012.03.14 |
| [마인드맵] Wedding (0) | 2012.03.06 |
| 영어를 빨리 배우는 방법 (0) | 2011.04.12 |
설정
트랙백
댓글
글
[마인드맵] My House
'학습로그 > 영어' 카테고리의 다른 글
| Preposition Of Time (2) | 2012.03.20 |
|---|---|
| Preposition Of Place (0) | 2012.03.15 |
| [마인드맵] My House (0) | 2012.03.14 |
| [마인드맵] Wedding (0) | 2012.03.06 |
| 영어를 빨리 배우는 방법 (0) | 2011.04.12 |
| ESL(cafe #274) (0) | 2011.03.02 |
설정
트랙백
댓글
글
HTML5 Canvas API
// canvas template
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
// draw line
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
context.moveTo(100, 150);
context.lineTo(450, 50);
context.lineWidth = 15;
context.strokeStyle = "#ff0000"; // line color
context.stroke();
// draw arc
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
var centerX = canvas.width / 2;
var centerY = canvas.height / 2;
var radius = 75;
var startingAngle = 1.1 * Math.PI;
var endingAngle = 1.9 * Math.PI;
var counterclockwise = false;
context.arc(centerX, centerY, radius, startingAngle, endingAngle, counterclockwise);
context.lineWidth = 15;
context.strokeStyle = "black"; // line color
context.stroke();
// draw curve
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
var controlX = 288;
var controlY = 0;
var endX = 388;
var endY = 150;
context.moveTo(188, 150);
context.quadraticCurveTo(controlX, controlY, endX, endY);
context.lineWidth = 10;
context.strokeStyle = "black"; // line color
context.stroke();
// draw bezier
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
var controlX1 = 140;
var controlY1 = 10;
var controlX2 = 388;
var controlY2 = 10;
var endX = 388;
var endY = 170;
context.moveTo(188, 130);
context.bezierCurveTo(controlX1, controlY1, controlX2, controlY2, endX, endY);
context.lineWidth = 10;
context.strokeStyle = "black"; // line color
context.stroke();
// draw path
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
context.beginPath();
context.moveTo(100, 20);
context.lineTo(200, 160); // line 1
context.quadraticCurveTo(230, 200, 250, 120); // quadratic curve
context.bezierCurveTo(290, -40, 300, 200, 400, 150); // bezier curve
context.lineTo(500, 90); // line 2
context.lineWidth = 5;
context.strokeStyle = "#0000ff";
context.stroke();
// draw rectangle
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
var topLeftCornerX = 188;
var topLeftCornerY = 50;
var width = 200;
var height = 100;
context.beginPath();
context.rect(topLeftCornerX, topLeftCornerY, width, height);
context.fillStyle = "#8ED6FF";
context.fill();
context.lineWidth = 5;
context.strokeStyle = "black";
context.stroke();
// draw pattern
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
var imageObj = new Image();
imageObj.onload = function(){
var pattern = context.createPattern(imageObj, "repeat");
context.rect(10, 10, canvas.width - 20, canvas.height - 20);
context.fillStyle = pattern;
context.fill();
};
imageObj.src = "wood-pattern.png";
// draw image
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
var destX = 69;
var destY = 50;
var imageObj = new Image();
imageObj.onload = function(){
context.drawImage(imageObj, destX, destY);
};
imageObj.src = "darth-vader.jpg";
// draw text
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
var x = 150;
var y = 100;
context.font = "40pt Calibri";
context.fillStyle = "#0000ff"; // text color
context.fillText("Hello World!", x, y);
// draw shadow
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
context.rect(188, 40, 200, 100);
context.fillStyle = "#8ED6FF";
context.shadowColor = "#bbbbbb";
context.shadowBlur = 20;
context.shadowOffsetX = 15;
context.shadowOffsetY = 15;
context.fill();
// clear canvas
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
context.rect(188, 40, 200, 100);
context.fillStyle = "#8ED6FF";
context.shadowColor = "#bbbbbb";
context.shadowBlur = 20;
context.shadowOffsetX = 15;
context.shadowOffsetY = 15;
context.fill();
// animation
window.requestAnimFrame = (function(callback){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback){
window.setTimeout(callback, 1000 / 60);
};
})();
function animate(){
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
// update
// clear
context.clearRect(0, 0, canvas.width, canvas.height);
// draw
// request new frame
requestAnimFrame(function(){
animate();
});
}
window.onload = function(){
// initialize stage
animate();
};
// linear motion
window.requestAnimFrame = (function(callback){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback){
window.setTimeout(callback, 1000 / 60);
};
})();
function animate(lastTime, myRectangle){
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
// update
var date = new Date();
var time = date.getTime();
var timeDiff = time - lastTime;
var linearSpeed = 100; // pixels / second
var linearDistEachFrame = linearSpeed * timeDiff / 1000;
var currentX = myRectangle.x;
if (currentX < canvas.width - myRectangle.width - myRectangle.borderWidth / 2) {
var newX = currentX + linearDistEachFrame;
myRectangle.x = newX;
}
lastTime = time;
// clear
context.clearRect(0, 0, canvas.width, canvas.height);
// draw
context.beginPath();
context.rect(myRectangle.x, myRectangle.y, myRectangle.width, myRectangle.height);
context.fillStyle = "#8ED6FF";
context.fill();
context.lineWidth = myRectangle.borderWidth;
context.strokeStyle = "black";
context.stroke();
// request new frame
requestAnimFrame(function(){
animate(lastTime, myRectangle);
});
}
window.onload = function(){
var myRectangle = {
x: 0,
y: 50,
width: 100,
height: 50,
borderWidth: 5
};
var date = new Date();
var time = date.getTime();
animate(time, myRectangle);
};
// animation start & stop
window.requestAnimFrame = (function(callback){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback){
window.setTimeout(callback, 1000 / 60);
};
})();
function drawRect(myRectangle){
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
context.beginPath();
context.rect(myRectangle.x, myRectangle.y, myRectangle.width, myRectangle.height);
context.fillStyle = "#8ED6FF";
context.fill();
context.lineWidth = myRectangle.borderWidth;
context.strokeStyle = "black";
context.stroke();
}
function animate(lastTime, myRectangle, animProp){
if (animProp.animate) {
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
// update
var date = new Date();
var time = date.getTime();
var timeDiff = time - lastTime;
var linearSpeed = 100;
// pixels / second
var linearDistEachFrame = linearSpeed * timeDiff / 1000;
var currentX = myRectangle.x;
if (currentX < canvas.width - myRectangle.width - myRectangle.borderWidth / 2) {
var newX = currentX + linearDistEachFrame;
myRectangle.x = newX;
}
lastTime = time;
// clear
context.clearRect(0, 0, canvas.width, canvas.height);
// draw
drawRect(myRectangle);
// request new frame
requestAnimFrame(function(){
animate(lastTime, myRectangle, animProp);
});
}
}
window.onload = function(){
var myRectangle = {
x: 0,
y: 50,
width: 100,
height: 50,
borderWidth: 5
};
/*
* make the animation properties an object
* so that it can be modified by reference
* from an event
*/
var animProp = {
animate: false
};
// add click listener to canvas
document.getElementById("myCanvas").addEventListener("click", function(){
if (animProp.animate) {
animProp.animate = false;
}
else {
animProp.animate = true;
var date = new Date();
var time = date.getTime();
animate(time, myRectangle, animProp);
}
});
drawRect(myRectangle);
};
// mouse position
function writeMessage(canvas, message){
var context = canvas.getContext('2d');
context.clearRect(0, 0, canvas.width, canvas.height);
context.font = '18pt Calibri';
context.fillStyle = 'black';
context.fillText(message, 10, 25);
}
function getMousePos(canvas, evt){
// get canvas position
var obj = canvas;
var top = 0;
var left = 0;
while (obj && obj.tagName != 'BODY') {
top += obj.offsetTop;
left += obj.offsetLeft;
obj = obj.offsetParent;
}
// return relative mouse position
var mouseX = evt.clientX - left + window.pageXOffset;
var mouseY = evt.clientY - top + window.pageYOffset;
return {
x: mouseX,
y: mouseY
};
}
window.onload = function(){
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
canvas.addEventListener('mousemove', function(evt){
var mousePos = getMousePos(canvas, evt);
var message = "Mouse position: " + mousePos.x + "," + mousePos.y;
writeMessage(canvas, message);
}, false);
};
'언어로그 > Html/Javascript/CSS' 카테고리의 다른 글
| HTML5 Canvas API (0) | 2012.03.11 |
|---|---|
| jquery 간략한 사용법 (0) | 2011.10.15 |
| [HTML5] 데이터 스토리지 (0) | 2011.06.26 |
| HTML 소개 (0) | 2011.06.13 |
설정
트랙백
댓글
글
[마인드맵] Wedding
bride: woman getting married
groom: man getting married
best man: groom's best friend or closest family member
(witness to the marriage)
groomsmen, ushers: other male friends or family members who stand up with the groom
bridesmaids: other female friends or family members who stand up with the bride
flower girl: young female child who carries the flowers
ring bearer: young male who carries the wedding rings
guests: all of the people who go to the wedding
priest/minister/justice of the peace: person who legally marries the couple
emcee: host; person who does most of the talking at the wedding reception
dj: person who plays the music
caterer: person (or company) who makes the food for the reception
'학습로그 > 영어' 카테고리의 다른 글
| Preposition Of Place (0) | 2012.03.15 |
|---|---|
| [마인드맵] My House (0) | 2012.03.14 |
| [마인드맵] Wedding (0) | 2012.03.06 |
| 영어를 빨리 배우는 방법 (0) | 2011.04.12 |
| ESL(cafe #274) (0) | 2011.03.02 |
| [EE]Hitch1 (0) | 2011.02.19 |
설정
트랙백
댓글
글
[마인드맵]C언어의 역사
'생각로그' 카테고리의 다른 글
| 시간정리 (1) | 2012.05.21 |
|---|---|
| Ignite 분당에 참석하고 나서... (4) | 2012.05.19 |
| [마인드맵]C언어의 역사 (0) | 2012.03.05 |
| 성공하는 말하기 (0) | 2012.03.01 |
| 호감주는 말하기 (0) | 2012.03.01 |
| 건강한 심리 (0) | 2012.02.19 |