前幾天我問上webapps.stackexchange.com以下問題:
https://webapps.stackexchange.com/questions/54130/is-there-a-way-to-remove-overlaying-events-in-google-calendar計算留在格jQuery的定位
我沒有得到任何好到目前爲止的答案,所以我決定編寫我自己的小腳本,根據重疊事件的數量改變事件的寬度。
我想避免箱子重疊,並希望它們堆疊。
這裏的初始測試:
下面是說明一個基本的腳本:
$('[class^="tg-col"]').each(function(){ // each day column
//(Mon, Tue, etc. has class tg-col or tg-col-weekend.
var ItemArray = [];
$(this).find(".chip").each(function(){ //each event box has chip class.
var top = $$(this).position().top; //Get top pixels
var bottom = $$(this).height() + top; //get end of the event.
var arr = ItemArray.push({
class: $$(this).attr("class").split(" ")[0],
start : top,
end:bottom
});
});
var result = getOverlaps(ItemArray); //get overlaps counts number of overlapping events.
$$.each(result, function(index, value){
var ec = result[index].eventCount;
var w = 100/result[index].eventCount-1 + "%";
var el = $$("."+result[index].class);
el.width(w);
//el.css("left",w);
});
});
function getOverlaps(events) {
// sort events
events.sort(function (a, b) {
return a.start - b.start;
});
var results = [];
for (var i = 0, l = events.length; i < l; i++) {
var oEvent = events[i];
var nOverlaps = 0;
for (var j = 0; j < l; j++) {
var oCompareEvent = events[j];
if (oCompareEvent.start <= oEvent.end && oCompareEvent.end > oEvent.start || oCompareEvent.end <= oEvent.start && oCompareEvent.start > oEvent.end) {
nOverlaps++;
}
}
if (nOverlaps > 1) {
results.push({
class: oEvent.class,
eventCount: nOverlaps
});
}
}
return results;
}
此解決方案僅適用於簡單的事件(左側):
對於更復雜的重疊,我們不能簡單地計算重疊數量和潛水100%/重疊數量。我們必須考慮其他方面。
此外,在谷歌日曆中的每個操作後,它重繪事件和腳本更改都會丟失。有更簡單的方法來解決這個問題嗎?
(也許是可能的修改從谷歌直接?(收到的js但它精縮:()。
如果有人想擺弄它,這裏是一個日曆小提琴[Here](http://jsfiddle.net/JfRU9/) – Olumide
是否可以更改每個事件框的寬度和高度?如果沒有,是否可以更改容納這些事件框的每個容器的寬度和/或高度? –
檢查Google日曆,我們只能更改每個事件的寬度和位置。對? –