单击时自定义按钮图标重复
Custom button icon duplicates on click
有趣的问题,但它一直让我抓狂。我有一个包含 FontAwesome 图标的自定义工具栏按钮。每次我单击任何工具栏按钮 (< > 今天月星期日) 另一个图标被添加到自定义按钮。
换句话说,如果点击查看上周,或从周视图更改为月视图,我会在自定义按钮上得到 2、3、4 等图标。
我会尝试添加图片来说明我的意思。我试过删除各种配置选项,但到目前为止没有什么能阻止额外的图标出现。
这是我的设置:
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
themeSystem: 'standard',
headerToolbar: {
left: 'prev,next today config',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay'
},
initialView: 'timeGridWeek',
slotMinTime: '06:00:00',
slotMaxTime: '21:00:00',
navLinks: true,
selectable: true,
editable: true,
dropable: true,
eventStartEditable: true,
eventResizableFromStart: true,
eventDurationEditable: true,
dayMaxEvents: true,
eventDisplay: 'block',
eventConstraint: {
start: moment().format('YYYY-MM-DD'),
end: '2100-01-01'
},
customButtons: {
config: {
icon: ' fa fa-cog',
click: function() {
window.location = 'calendar_options.html';
}
}
},
这是一个完整的示例,我删除了所有不必要的代码。它仍然显示相同的行为。代码如下。
https://rstoeber.com/calendar/
我假设我定义自定义按钮的方式有问题,但我遵循了我发现的其他示例。
<script defer src="https://use.fontawesome.com/releases/v5.15.4/js/solid.js" integrity="sha384-/BxOvRagtVDn9dJ+JGCtcofNXgQO/CCCVKdMfL115s3gOgQxWaX/tSq5V8dRgsbc" crossorigin="anonymous"></script>
<script defer src="https://use.fontawesome.com/releases/v5.15.4/js/fontawesome.js" integrity="sha384-dPBGbj4Uoy1OOpM4+aRGfAOc0W37JkROT+3uynUgTHZCHZNMHfGXsmmvYTffZjYO" crossorigin="anonymous"></script>
<link href='lib/main.css' rel='stylesheet' />
<script src='lib/main.js'></script>
<script type='text/javascript'>
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
themeSystem: 'standard',
headerToolbar: {
left: 'prev,next today config',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay'
},
initialView: 'timeGridWeek',
customButtons: {
config: {
icon: ' fa fa-cog',
click: function() {
window.location = 'calendar_options.html';
}
}
},
events: [
{
'id': 9,
'textColor': '#FFFFFF',
'backgroundColor': '#AA2217',
'title': 'Meet Doug at IBM building',
'start': '2022-04-08 10:00:00',
'end': '2022-04-08 11:00:00'
}, {
'id': 16,
'textColor': '#FFFFFF',
'backgroundColor': '#AA2217',
'title': 'End of week party',
'start': '2022-04-12 11:00:00',
'end': '2022-04-12 12:00:00'
}
]
});
calendar.render();
});
</script>
我没有找到解决您问题的方法,但我有一个解决方法,将其添加到您的选项中,目前应该没问题:
datesSet: function( view, element ) {
document.querySelectorAll('.fc-config-button svg:not(:first-child)').forEach((e) => {
e.remove()
})
}
只是删除过多的图标 xD
---更新的答案
检查元素会让您认为 fullcalendar 正在使用 class 向您显示图标。它会尝试读取您提供的图标名称,然后将其添加到 HTML 内的 span 标签中。如果您直接在自定义按钮的图标中提供 font-awsome 图标,它将为用户在 window 中按下的每个按钮创建一个 SVG。 (我认为原因是隐藏在 Fullcalendar 本身的 js 后面)
在这种情况下,您可以通过添加额外的 js 行来手动操作它以使用 font-awsome.
document.addEventListener("DOMContentLoaded", function () {
var calendarEl = document.getElementById("calendar");
var calendar = new FullCalendar.Calendar(calendarEl, {
themeSystem: "standard",
headerToolbar: {
left: "prev,next today config",
center: "title",
right: "dayGridMonth,timeGridWeek,timeGridDay"
},
initialView: "timeGridWeek",
customButtons: {
config: {
icon: `cog`,
click: function () {
//window.location = "calendar_options.html";
alert("Hi")
}
}
},
events: [
{
id: 9,
textColor: "#FFFFFF",
backgroundColor: "#AA2217",
title: "Meet Doug at IBM building",
start: "2022-04-08 10:00:00",
end: "2022-04-08 11:00:00"
},
{
id: 16,
textColor: "#FFFFFF",
backgroundColor: "#AA2217",
title: "End of week party",
start: "2022-04-12 11:00:00",
end: "2022-04-12 12:00:00"
}
]
});
calendar.render();
});
$(document).ready(() => {
$(".fc-icon-cog").append('<i class="fas fa-cog"></i>');
})
html, body {
margin: 0;
padding: 0;
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
font-size: 14px;
};
#calendar {
max-width: 1100px;
margin: 40px auto;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script defer src="https://use.fontawesome.com/releases/v5.15.4/js/solid.js" integrity="sha384-/BxOvRagtVDn9dJ+JGCtcofNXgQO/CCCVKdMfL115s3gOgQxWaX/tSq5V8dRgsbc" crossorigin="anonymous"></script>
<script defer src="https://use.fontawesome.com/releases/v5.15.4/js/fontawesome.js" integrity="sha384-dPBGbj4Uoy1OOpM4+aRGfAOc0W37JkROT+3uynUgTHZCHZNMHfGXsmmvYTffZjYO" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/fullcalendar@5.10.0/main.min.js" integrity="sha256-PL1mKrYeZkM5SsJ5nydN6463HLkV918bgDdYL0I5Z+k=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fullcalendar@5.10.0/main.min.css" integrity="sha256-16PDMvytZTH9heHu9KBPjzrFTaoner60bnABykjNiM0=" crossorigin="anonymous">
<div id='calendar'></div>
---更新前
在研究文档和问题本身时,我注意到此代码片段中存在错误。
- 所述问题与 font-awsome 的使用有关。正如文档中明确表示的那样,当您使用标准主题时,您只有四个图标可供使用。作为参考,可以参考https://fullcalendar.io/docs/buttonIcons
请不要犹豫,在此 post 下对任何 follow-ups 发表评论。
有趣的问题,但它一直让我抓狂。我有一个包含 FontAwesome 图标的自定义工具栏按钮。每次我单击任何工具栏按钮 (< > 今天月星期日) 另一个图标被添加到自定义按钮。
换句话说,如果点击查看上周,或从周视图更改为月视图,我会在自定义按钮上得到 2、3、4 等图标。
我会尝试添加图片来说明我的意思。我试过删除各种配置选项,但到目前为止没有什么能阻止额外的图标出现。
这是我的设置:
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
themeSystem: 'standard',
headerToolbar: {
left: 'prev,next today config',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay'
},
initialView: 'timeGridWeek',
slotMinTime: '06:00:00',
slotMaxTime: '21:00:00',
navLinks: true,
selectable: true,
editable: true,
dropable: true,
eventStartEditable: true,
eventResizableFromStart: true,
eventDurationEditable: true,
dayMaxEvents: true,
eventDisplay: 'block',
eventConstraint: {
start: moment().format('YYYY-MM-DD'),
end: '2100-01-01'
},
customButtons: {
config: {
icon: ' fa fa-cog',
click: function() {
window.location = 'calendar_options.html';
}
}
},
这是一个完整的示例,我删除了所有不必要的代码。它仍然显示相同的行为。代码如下。
https://rstoeber.com/calendar/
我假设我定义自定义按钮的方式有问题,但我遵循了我发现的其他示例。
<script defer src="https://use.fontawesome.com/releases/v5.15.4/js/solid.js" integrity="sha384-/BxOvRagtVDn9dJ+JGCtcofNXgQO/CCCVKdMfL115s3gOgQxWaX/tSq5V8dRgsbc" crossorigin="anonymous"></script>
<script defer src="https://use.fontawesome.com/releases/v5.15.4/js/fontawesome.js" integrity="sha384-dPBGbj4Uoy1OOpM4+aRGfAOc0W37JkROT+3uynUgTHZCHZNMHfGXsmmvYTffZjYO" crossorigin="anonymous"></script>
<link href='lib/main.css' rel='stylesheet' />
<script src='lib/main.js'></script>
<script type='text/javascript'>
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
themeSystem: 'standard',
headerToolbar: {
left: 'prev,next today config',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay'
},
initialView: 'timeGridWeek',
customButtons: {
config: {
icon: ' fa fa-cog',
click: function() {
window.location = 'calendar_options.html';
}
}
},
events: [
{
'id': 9,
'textColor': '#FFFFFF',
'backgroundColor': '#AA2217',
'title': 'Meet Doug at IBM building',
'start': '2022-04-08 10:00:00',
'end': '2022-04-08 11:00:00'
}, {
'id': 16,
'textColor': '#FFFFFF',
'backgroundColor': '#AA2217',
'title': 'End of week party',
'start': '2022-04-12 11:00:00',
'end': '2022-04-12 12:00:00'
}
]
});
calendar.render();
});
</script>
我没有找到解决您问题的方法,但我有一个解决方法,将其添加到您的选项中,目前应该没问题:
datesSet: function( view, element ) {
document.querySelectorAll('.fc-config-button svg:not(:first-child)').forEach((e) => {
e.remove()
})
}
只是删除过多的图标 xD
---更新的答案
检查元素会让您认为 fullcalendar 正在使用 class 向您显示图标。它会尝试读取您提供的图标名称,然后将其添加到 HTML 内的 span 标签中。如果您直接在自定义按钮的图标中提供 font-awsome 图标,它将为用户在 window 中按下的每个按钮创建一个 SVG。 (我认为原因是隐藏在 Fullcalendar 本身的 js 后面) 在这种情况下,您可以通过添加额外的 js 行来手动操作它以使用 font-awsome.
document.addEventListener("DOMContentLoaded", function () {
var calendarEl = document.getElementById("calendar");
var calendar = new FullCalendar.Calendar(calendarEl, {
themeSystem: "standard",
headerToolbar: {
left: "prev,next today config",
center: "title",
right: "dayGridMonth,timeGridWeek,timeGridDay"
},
initialView: "timeGridWeek",
customButtons: {
config: {
icon: `cog`,
click: function () {
//window.location = "calendar_options.html";
alert("Hi")
}
}
},
events: [
{
id: 9,
textColor: "#FFFFFF",
backgroundColor: "#AA2217",
title: "Meet Doug at IBM building",
start: "2022-04-08 10:00:00",
end: "2022-04-08 11:00:00"
},
{
id: 16,
textColor: "#FFFFFF",
backgroundColor: "#AA2217",
title: "End of week party",
start: "2022-04-12 11:00:00",
end: "2022-04-12 12:00:00"
}
]
});
calendar.render();
});
$(document).ready(() => {
$(".fc-icon-cog").append('<i class="fas fa-cog"></i>');
})
html, body {
margin: 0;
padding: 0;
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
font-size: 14px;
};
#calendar {
max-width: 1100px;
margin: 40px auto;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script defer src="https://use.fontawesome.com/releases/v5.15.4/js/solid.js" integrity="sha384-/BxOvRagtVDn9dJ+JGCtcofNXgQO/CCCVKdMfL115s3gOgQxWaX/tSq5V8dRgsbc" crossorigin="anonymous"></script>
<script defer src="https://use.fontawesome.com/releases/v5.15.4/js/fontawesome.js" integrity="sha384-dPBGbj4Uoy1OOpM4+aRGfAOc0W37JkROT+3uynUgTHZCHZNMHfGXsmmvYTffZjYO" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/fullcalendar@5.10.0/main.min.js" integrity="sha256-PL1mKrYeZkM5SsJ5nydN6463HLkV918bgDdYL0I5Z+k=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fullcalendar@5.10.0/main.min.css" integrity="sha256-16PDMvytZTH9heHu9KBPjzrFTaoner60bnABykjNiM0=" crossorigin="anonymous">
<div id='calendar'></div>
---更新前
在研究文档和问题本身时,我注意到此代码片段中存在错误。
- 所述问题与 font-awsome 的使用有关。正如文档中明确表示的那样,当您使用标准主题时,您只有四个图标可供使用。作为参考,可以参考https://fullcalendar.io/docs/buttonIcons
请不要犹豫,在此 post 下对任何 follow-ups 发表评论。