νμΊλ¦°λ(FullCalendar) μμ± - 4
FullCalendar JSλ₯Ό νμ©νλ€ λ³΄λ©΄ κ΅μ₯ν λ€μν μμ±κ³Ό μ΄λ²€νΈλ₯Ό λ³Ό μ μλ€. μ¬λ¬ μμ±λ€μ΄ μ΄λ€ νΉμ§λ€μ κ°μ§κ³ μλμ§, νμΊλ¦°λκ° κ°μ§κ³ μλ μ΄λ²€νΈμλ μ΄λ€ κ²λ€μ΄ μμΌλ©° ν΄λΉ μ΄λ²€νΈλ μ΄λ€ λμλ€μ ν¬ν¨νκ³ μλμ§ λ±λ±μ λν΄μ μ λͺ¨λ₯Ό λκ° λ§λ€. FullCalendar JS 곡μ ννμ΄μ§μμ μ 곡νλ Documents νμΌμ 보긴 νμ§λ§ Docs λ¬Έμλ€μ νμΈνλ κ² μμ§ μ΅μμ§ μμ μ¬λμ λ¬Έμ 보λ λ°©λ²μ‘°μ°¨ μ΄λ €μΈ μ μλ€. κ·Έλμ FullCalendar JSμμ μ¬μ©ν μ μλ μμ±λ€μ νλμ μ΄ν΄λ³΄κ³ μ νλ€. λ¬Όλ‘ 100% λͺ¨λ μμ±λ€μ μ λΆ λ³΄λ©΄ μ’κ² μ§λ§, κ°μ₯ μ€μν μμ±λ€ μμ£Όλ‘ νμΈν΄ λ³΄κ³ κ·Έ μΈμ μμ±λ€μ μ§μ Documentsλ₯Ό νμΈν΄ 보길 λ°λλ€.
π 4. μ ν κΈ°λ₯ (Selectable Options)
selectable
' μ¬μ©μκ° ν΄λ¦νκ³ λλκ·Ένμ¬ μ¬λ¬ λ μ§λ μκ°λλ₯Ό κ°μ‘° νμ '
selectable μ΅μ μ μ¬μ©μκ° ν΄λ¦νκ³ λλκ·Ένμ¬ μ νν μ μλλ‘ νλ μ΅μ μ λλ€. ν΄λΉ μ΅μ μ΄ νμ±νλμ΄ μμΌλ©΄ μ¬μ©μκ° μ ννκ³ μ·¨μλλ μμ μ λͺ¨λν°λ§νλλ° μ μ©ν©λλ€. ν΄λΉ μ΅μ μ νμ νλ¬κ·ΈμΈ( '@fullcalendar/core' )μ΄ νμν©λλ€. ν΄λΉ νλ¬κ·ΈμΈμ 'index.global.js'μ ν¬ν¨λμ΄ μμ΄ global.jsλ₯Ό μ¬μ©νλ€λ©΄ 무리μμ΄ μ¬μ©ν μ μλ€.
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
selectable : true
// selectable : false
});
calendar.render();
});
selectable μ΅μ μ΄ 'false'λ‘ λΉνμ±ν λμ΄ μλ€λ©΄ μ μμμ²λΌ μ ν μμμ΄ λνλμ§ μμ΅λλ€. νμ§λ§ μ΅μ κ°μ 'true'μΈ νμ±μΌλ‘ μ€μ νλ€λ©΄ μ¬μ©μκ° μ νν μμ μ λͺ¨λν°λ§ ν μ μμ΅λλ€.
selectMirror
' μ¬μ©μκ° λλκ·Ένλ λμ PlaceHolder μ΄λ²€νΈλ₯Ό κ·Έλ¦΄μ§ μ¬λΆ '
selectMirrorλ FullCalendarμμ μ ν(selection) μ μκ°μ μΈ νΌλλ°±μ μ 곡νλ μ΅μ μ λλ€. μ΄ μμ±μ trueλ‘ μ€μ νλ©΄, μ¬μ©μκ° λλκ·Έλ‘ λ μ§λ μκ° λ²μλ₯Ό μ νν λ, μ€μ λ‘ μ΄λ²€νΈλ₯Ό μμ±νμ§ μκ³ λ "λ―Έλ¬(mirror)" ννλ‘ μμ νμκ° λ©λλ€. μ¦, μ ν μμμ΄ λ§μΉ μ΄λ²€νΈμ²λΌ μΊλ¦°λμ νμλμ΄ μ¬μ©μμκ² μ ν λ²μλ₯Ό λ λͺ ννκ² λ³΄μ¬μ£Όλ μν μ ν©λλ€. κΈ°λ³Έκ°μ falseμ λλ€.
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
selectable: true,
selectMirror: true
// selectMirror: false
});
calendar.render();
});
λ μ§λ μκ° λ²μλ₯Ό λλκ·Ένλ©΄ νλ λΈλ‘ ννλ‘ μ ν μμμ΄ νμλλκ²μ νμΈν μ μκ³ , νλ ν΄λΉ μμμ΄ λ°λ‘ selectMirror μμ±μ κ°μ΄ trueλ‘ νμ±νλ ν¨κ³Όμ λλ€. ν΄λΉ μ΄λ²€νΈλ selectable μ΅μ μ κ°μ΄ trueλ‘ μ€μ λμ΄μΌνκ³ , μ€μ μ΄λ²€νΈ λ°μ΄ν°κ° μ μ₯λκ±°λ μΆκ°λμ§ μκ³ μκ°μ μΈ νμλ§ ν©λλ€. μ ν ν΄μ μμλ Mirror ν¨κ³Όλ μλμΌλ‘ μ¬λΌμ§λλ€. ν΄λΉ κΈ°λ₯μ νΉν λλκ·Έλ‘ μκ° λΈλ‘μ μ νν λ μ μ©νλ©°, λ μ§κ΄μ μΈ UIλ₯Ό μ 곡ν©λλ€.
unselectAuto
' νμ΄μ§μ λ€λ₯Έ κ³³μ ν΄λ¦νλ©΄ νμ¬ μ νμ΄ μ§μμ§λλ€. '
unselectAuto μμ±μ μ¬μ©μκ° μΌμ μ μ ν(select)ν ν, μΊλ¦°λμ λ€λ₯Έ λΆλΆμ ν΄λ¦νμ λ μλμΌλ‘ μ νμ ν΄μ (unselect)ν μ§ μ¬λΆλ₯Ό μ μ΄νλ μμ±μ λλ€. κΈ°λ³Έκ°μ 'true'(μλ ν΄μ )μ΄κ³ 'false'λ‘ μ€μ μ μλμΌλ‘ ν΄μ ν΄μΌ ν©λλ€. μ΄λ, selectable μμ±μ κ°μ 'true'λ‘ ν¨κ» μ¬μ©ν©λλ€.
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
selectable: true,
unselectAuto: true
// unselectAuto: false
});
calendar.render();
});
unselectAuto μμ±μ trueλ‘ μ€μ νκ²λλ©΄ ν΄λΉ μΌμλ₯Ό μ ννκ³ μΌμ λ°λ₯Ό ν΄λ¦νκ±°λ λ°κΉ₯ λ°°κ²½μ ν΄λ¦νμ λ μ νν μΌμμ μμμ΄ ν΄μ λλκ±Έ νμΈν μ μμ΅λλ€. falseλ‘ μ€μ νκ²λλ©΄ λ€λ₯Έ λΆλΆμ ν΄λ¦νλ€ν΄λ μμμ΄ ν΄μ λμ§ μμ΅λλ€. κ·Έλ κΈ° λλ¬Έμ μλμΌλ‘ μμ ν΄μ λ₯Ό μ§νν΄μΌν©λλ€.
selectConstraint
' μΌμ μ νμ μ ν κ°λ₯ν λ²μλ₯Ό μ ν '
selectConstraint μμ±μ μΌμ μ ν(select)μ μ ν κ°λ₯ν λ²μλ₯Ό μ ννλ μμ±μ λλ€. νΉμ μκ°λ λλ μΌμ κ³Ό κ²ΉμΉμ§ μλλ‘ μ ννκ³ μμ½ μμ€ν , 리μμ€ κ΄λ¦¬, μ 무 μΊλ¦°λμμ μ μ©ν κΈ°λ₯μ λλ€. ν΄λΉ μμ±μ selectable μμ±μ΄ true μΌλ, ν¨κ» μ¬μ© κ°λ₯ν©λλ€.
var calendar = new FullCalendar.Calendar(calendarEl, {
initialView: 'timeGridWeek',
selectable: true, // λ μ§/μκ° μ ν κ°λ₯
selectConstraint: {
startTime: '09:00', // μ€μ 9μλΆν°
endTime: '18:00' // μ€ν 6μκΉμ§λ§ μ ν κ°λ₯
},
events: [
{ title: 'μΌμ 1', start: '2025-02-20T10:00:00', end: '2025-02-20T11:00:00' }
]
});
calendar.render();
@Junesker
λκΈ