๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

์ง„๋™ (vibration)

๐Ÿ”” ์ตœ์‹ ํ™” ์ผ์ž: 2025-02-10

๊ฐœ์š”โ€‹

vibration ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ๋””๋ฐ”์ด์Šค ์ง„๋™ ๋ฐ ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ์„ ์ œ์–ดํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฅผ ํ†ตํ•ด ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ(์„ฑ๊ณต, ์˜ค๋ฅ˜ ๋“ฑ)๊ณผ ์งง์€ ์ง„๋™ ํŒจํ„ด์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ฑฐ๋‚˜, ์‚ฌ์šฉ์ž ์„ค์ •์— ๋”ฐ๋ผ ์ง„๋™ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™” ๋˜๋Š” ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


ํƒ€์ž… ์ •์˜โ€‹

HapticsTypeโ€‹

ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ ์œ ํ˜•์„ ๋‚˜ํƒ€๋‚ด๋Š” ์—ด๊ฑฐํ˜•(enum)์ž…๋‹ˆ๋‹ค.

๊ฐ’์„ค๋ช…
SUCCESS์„ฑ๊ณต ์‹œ์˜ ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ
ERROR์˜ค๋ฅ˜ ๋˜๋Š” ์‹คํŒจ ์‹œ ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ

๋ฉ”์„œ๋“œ ๋ชฉ๋กโ€‹

๋ฉ”์„œ๋“œ์„ค๋ช…์ถ”๊ฐ€๋œ ๋ฒ„์ „
setHaptics(enable)ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.ver.1.2.0
getHaptics(callback)ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.ver.1.2.0
haptics(hapticsType?)ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ์„ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.ver.1.2.0
setVibration(enable)์ง„๋™ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.ver.1.2.0
getVibration(callback)์ง„๋™ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.ver.1.2.0
vibrate()์งง์€ ์ง„๋™ ํŒจํ„ด์„ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.ver.1.2.0

๋ฉ”์„œ๋“œ ์ƒ์„ธโ€‹

setHaptics(enable: boolean): voidโ€‹

  • since ver.1.2.0

์„ค๋ช… (setHaptics)โ€‹

์•ฑ ์‚ฌ์šฉ์ž์˜ ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“ข ์Šคํ† ์–ด ์ •์ฑ…: ์ง„๋™ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์•ฑ ์‚ฌ์šฉ์ž๊ฐ€ ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ์„ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์„ ๋ฐ˜๋“œ์‹œ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜ (setHaptics)โ€‹

์ด๋ฆ„ํƒ€์ž…ํ•„์ˆ˜ ์—ฌ๋ถ€์„ค๋ช…
enablebooleanโœ…ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ ์‚ฌ์šฉ ์—ฌ๋ถ€ (true = ์‚ฌ์šฉ, false = ์‚ฌ์šฉ ์•ˆ ํ•จ)

๋ฐ˜ํ™˜ ๊ฐ’ (setHaptics)โ€‹

ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” ๋ฐ˜ํ™˜ ๊ฐ’์„ ๊ฐ€์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์˜ˆ์ œ (setHaptics)โ€‹

// ์•ฑ์ด ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
Nachocode.vibration.setHaptics(true);
// ์‚ฌ์šฉ์ž์˜ ์„ ํƒ์— ๋”ฐ๋ผ ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ ์‚ฌ์šฉ์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.
Nachocode.vibration.setHaptics(false);
// ex. ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ ํ† ๊ธ€ UI ๋ณ€๊ฒฝ ์‹œ ํ˜ธ์ถœ ๋  ํ•จ์ˆ˜
function onHapticsToggleChange(enable) {
Nachocode.vibration.setHaptics(enable);
}

getHaptics(callback: (enable: boolean) => any): voidโ€‹

  • since ver.1.2.0

์„ค๋ช… (getHaptics)โ€‹

ํ˜„์žฌ ์•ฑ ์‚ฌ์šฉ์ž์˜ ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
์ฝœ๋ฐฑ ํ•จ์ˆ˜๋กœ true ๋˜๋Š” false ๊ฐ’์„ ์ „๋‹ฌ๋ฐ›์Šต๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜ (getHaptics)โ€‹

์ด๋ฆ„ํƒ€์ž…ํ•„์ˆ˜ ์—ฌ๋ถ€์„ค๋ช…
callback(enable: boolean) => anyโœ…ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ ์‚ฌ์šฉ ์—ฌ๋ถ€ ๋ฐ˜ํ™˜

๋ฐ˜ํ™˜ ๊ฐ’ (getHaptics)โ€‹

ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” ๋ฐ˜ํ™˜ ๊ฐ’์„ ๊ฐ€์ง€์ง€ ์•Š์œผ๋ฉฐ, ๊ฒฐ๊ณผ๋Š” callback์„ ํ†ตํ•ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์˜ˆ์ œ (getHaptics)โ€‹

// ex. Native์—์„œ ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ ์‚ฌ์šฉ์œ ๋ฌด๋ฅผ ๋ฐ›์•„์™€ input์˜ checked ๊ฐ’์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
Nachocode.vibration.getHaptics(enable => {
console.log(`ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ ์‚ฌ์šฉ ์—ฌ๋ถ€: ${enable ? '์‚ฌ์šฉ ์ค‘' : '๋น„ํ™œ์„ฑํ™”'}`);

document.querySelector(
`input[name="useHaptics"][value="${enable}"]`
).checked = true;
});

haptics(hapticsType?: HapticsType): voidโ€‹

  • since ver.1.2.0

์„ค๋ช… (haptics)โ€‹

ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ์„ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
SUCCESS = 0 | ERROR = 1์„ ์˜ต์…˜์œผ๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ SUCCESS ํ”ผ๋“œ๋ฐฑ์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์„ ํƒ์ ์œผ๋กœ ERROR ํ”ผ๋“œ๋ฐฑ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜ (haptics)โ€‹

์ด๋ฆ„ํƒ€์ž…ํ•„์ˆ˜ ์—ฌ๋ถ€์„ค๋ช…
hapticsTypeHapticsTypeโŒํŠธ๋ฆฌ๊ฑฐํ•  ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ ์œ ํ˜•

์‚ฌ์šฉ ์˜ˆ์ œ (haptics)โ€‹

// ๊ธฐ๋ณธ ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ (SUCCESS)
// DOM ์š”์†Œ์˜ touchstart ์ด๋ฒคํŠธ์— ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋ฐ”์ธ๋“œ ํ•ฉ๋‹ˆ๋‹ค.
document
.getElementById('hapticsButton')
.addEventListener('touchstart', function () {
// ๊ธฐ๋ณธ์ ์œผ๋กœ HapticsType.SUCCESS(=0)๋ฅผ ์˜ต์…˜์œผ๋กœ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
Nachocode.vibration.haptics();
});

document
.getElementById('hapticsButton2')
.addEventListener('touchstart', function () {
// 0์€ HapticsType.SUCCESS๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
Nachocode.vibration.haptics(0);
});
// ์˜ค๋ฅ˜ ์‹œ ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ (ERROR)
// DOM ์š”์†Œ์˜ touchstart ์ด๋ฒคํŠธ์— ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋ฐ”์ธ๋“œ ํ•ฉ๋‹ˆ๋‹ค.
document
.getElementById('hapticsButton')
.addEventListener('touchstart', function () {
// 1์€ HapticsType.ERROR๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
Nachocode.vibration.haptics(1);
});

setVibration(enable: boolean): voidโ€‹

  • since ver.1.2.0

์„ค๋ช… (setVibration)โ€‹

์•ฑ ์‚ฌ์šฉ์ž์˜ ์ง„๋™ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“ข ์Šคํ† ์–ด ์ •์ฑ…: ์ง„๋™ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์•ฑ ์‚ฌ์šฉ์ž๊ฐ€ ์ง„๋™์„ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์„ ๋ฐ˜๋“œ์‹œ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜ (setVibration)โ€‹

์ด๋ฆ„ํƒ€์ž…ํ•„์ˆ˜ ์—ฌ๋ถ€์„ค๋ช…
enablebooleanโœ…์ง„๋™ ์‚ฌ์šฉ ์—ฌ๋ถ€ (true/false)

์‚ฌ์šฉ ์˜ˆ์ œ (setVibration)โ€‹

// ์•ฑ์ด ์ง„๋™์„ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
Nachocode.vibration.setVibration(true);
// ์‚ฌ์šฉ์ž์˜ ์„ ํƒ์— ๋”ฐ๋ผ ์ง„๋™ ์‚ฌ์šฉ์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.
Nachocode.vibration.setVibration(false);
// ex. ์ง„๋™ ํ† ๊ธ€ UI ๋ณ€๊ฒฝ ์‹œ ํ˜ธ์ถœ ๋  ํ•จ์ˆ˜
function onVibrationToggleChange(enable) {
Nachocode.vibration.setVibration(enable);
}

getVibration(callback: (enable: boolean) => void): voidโ€‹

  • since ver.1.2.0

์„ค๋ช… (getVibration)โ€‹

ํ˜„์žฌ ์•ฑ ์‚ฌ์šฉ์ž์˜ ์ง„๋™ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
์ฝœ๋ฐฑ ํ•จ์ˆ˜๋กœ true ๋˜๋Š” false ๊ฐ’์„ ์ „๋‹ฌ๋ฐ›์Šต๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜ (getVibration)โ€‹

์ด๋ฆ„ํƒ€์ž…ํ•„์ˆ˜ ์—ฌ๋ถ€์„ค๋ช…
callback(enable: boolean) => anyโœ…์ง„๋™ ์‚ฌ์šฉ ์—ฌ๋ถ€ ๋ฐ˜ํ™˜

๋ฐ˜ํ™˜ ๊ฐ’ (getVibration)โ€‹

ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” ๋ฐ˜ํ™˜ ๊ฐ’์„ ๊ฐ€์ง€์ง€ ์•Š์œผ๋ฉฐ, ๊ฒฐ๊ณผ๋Š” callback์„ ํ†ตํ•ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์˜ˆ์ œ (getVibration)โ€‹

// ex. Native์—์„œ ์ง„๋™ ์‚ฌ์šฉ์œ ๋ฌด๋ฅผ ๋ฐ›์•„์™€ input์˜ checked ๊ฐ’์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
Nachocode.vibration.getVibration(enable => {
console.log(`์ง„๋™ ์‚ฌ์šฉ ์—ฌ๋ถ€: ${enable ? '์‚ฌ์šฉ ์ค‘' : '๋น„ํ™œ์„ฑํ™”'}`);

document.querySelector(
`input[name="useVibration"][value="${enable}"]`
).checked = true;
});

vibrate(): voidโ€‹

  • since ver.1.2.0

์„ค๋ช… (vibrate)โ€‹

์งง์€ ํŒจํ„ด์˜ ์ง„๋™์„ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜ ๊ฐ’ (vibrate)โ€‹

ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” ๋ฐ˜ํ™˜ ๊ฐ’์„ ๊ฐ€์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์˜ˆ์ œ (vibrate)โ€‹

// DOM ์š”์†Œ์˜ click ์ด๋ฒคํŠธ์— ์ง„๋™ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋ฐ”์ธ๋“œ ํ•ฉ๋‹ˆ๋‹ค.
document.getElementById('vibrateButton').addEventListener('click', function () {
// ์ง„๋™ ํ˜ธ์ถœ
Nachocode.vibration.vibrate();
});