gpt4 book ai didi

javascript - 如何复制拖放事件?

转载 作者:行者123 更新时间:2023-12-01 01:08:14 24 4
gpt4 key购买 nike

我使用新版本 fullcalendar 更新了我的应用程序我想复制/粘贴我拖放的事件。

我在计划对象中将可编辑选项设置为 true,并且拖放确实有效,但我希望它能够复制事件而不是替换它。

我当前正在尝试编辑事件 eventDragStart 以创建我的事件的克隆。

var jsonEvents = <?php echo json_encode($arrayEvenements); ?>;
var planning = {
plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list' ],
defaultView: 'timeGridWeek',
allDaySlot: false,
header: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
},
editable: true,
events : jsonEvents,
eventClick : function goTo(info){
// Some link to my event page
},
eventDragStart : function cloneEvent(info) {
// Where I want the magic to happen I guess ???
var evenement = info.event;
console.log(evenement);
},
eventDragStop : function upadateEvent(info) {
var evenement = info.event;
console.log(info)
}
}

var calendarEl = $('#calendar1')[0]
var calendar = new FullCalendar.Calendar(calendarEl, planning)
calendar.render()

我想要我的拖放事件的克隆我有一个拖放事件,我无缘无故地四处移动

最佳答案

对于克隆事件,我认为尝试在 eventDragStart 中执行任何操作都为时已晚,此时事件已经开始移动。

如果您不关心事件被拖动和调整大小,而只想在拖动时克隆事件,那么解决方案非常简单。只需将每个事件视为外部事件即可。通过这种方法,可编辑不应该是真的。

let containerEl = document.getElementById("calendar");
let calendarEl = document.getElementById("calendar");

new Draggable(containerEl, {
itemSelector: ".fc-event",
eventData: function(eventEl) {
return {
title: eventEl.innerText
};
}
});

var calendar = new Calendar(calendarEl, {
plugins: ["dayGrid", "interaction"],
defaultView: "dayGridMonth",
events: [
{
title: "Test 1",
start: "2019-04-01"
},
{
title: "Test 2",
start: "2019-04-03",
end: "2019-04-05"
},
{
title: "Test 3",
start: "2019-04-22",
end: "2019-04-25"
},
{
title: "Test 4",
start: "2019-04-19"
}
]
});

calendar.render();

Working example

但是,如果您确实需要能够拖动事件并调整事件大小,则需要某种方法来区分常规拖动和外部拖动。在 v3 中,我曾经在按住控制键并且用户开始拖动时复制事件。 v4 中似乎存在问题,我计划进一步研究这个问题,但与此同时,我有一个按住 Shift 键时的工作示例。

如果您在不按住 Shift 的情况下拖动,则事件将被移动,如果您在按住 Shift 的同时拖动,则事件将被克隆。

let shiftIsPressed = false;

function setEventsCopyable(isCopyable) {
shiftIsPressed = !shiftIsPressed;
calendar.setOption("droppable", isCopyable);
calendar.setOption("editable", !isCopyable);
}

document.addEventListener("keydown", event => {
if (event.keyCode === 16 && !shiftIsPressed) {
setEventsCopyable(true);
}
});

document.addEventListener("keyup", event => {
if (shiftIsPressed) {
setEventsCopyable(false);
}
});

let containerEl = document.getElementById("calendar");
let calendarEl = document.getElementById("calendar");

new Draggable(containerEl, {
itemSelector: ".fc-event",
eventData: function(eventEl) {
return {
title: eventEl.innerText
};
}
});

var calendar = new Calendar(calendarEl, {
plugins: ["dayGrid", "interaction"],
defaultView: "dayGridMonth",
// Determines whether the events on the calendar can be modified.
editable: true,
// Determines if external draggable elements can be dropped onto the calendar.
dropAccept(el) {
return shiftIsPressed;
},
events: [
{
title: "Test 1",
start: "2019-04-01"
},
{
title: "Test 2",
start: "2019-04-03",
end: "2019-04-05"
},
{
title: "Test 3",
start: "2019-04-22",
end: "2019-04-25"
},
{
title: "Test 4",
start: "2019-04-19"
}
]
});

calendar.render();

Working example

关于javascript - 如何复制拖放事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55418626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com