数日前、私はwebapps.stackexchange.com上、次の質問尋ねたのdivのjQueryの位置決め左:私は今のところ何か良い答えを取得していないので、私がすることに決めました
https://webapps.stackexchange.com/questions/54130/is-there-a-way-to-remove-overlaying-events-in-google-calendarの計算
を重複しているイベントの数に基づいてイベントの幅を変更する私自身の小さなスクリプトを書いてください。
ボックスの重なりを避け、スタックしたいと思っています。
$('[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%/オーバーラップの数をダイビングすることはできません。我々は他の次元を考慮に入れなければならない。
また、Googleカレンダーの各操作後に、イベントが再描画され、スクリプトの変更が失われます。この問題を解決する簡単な方法はありますか?
(多分それはGoogleの直接?(から受け取ったJSを変更することが可能である。しかし、それは):(縮小されます。
誰がそれをいじるしたい場合は、ここではカレンダーのフィドルだ[ここ](http://jsfiddle.net/JfRU9/) – Olumide
それは幅と各イベントのボックスの高さを変更することは可能ですか?そうでない場合、イベントボックスを保持する各コンテナの幅や高さを変更することは可能ですか? –
Googleカレンダーでチェックすると、各イベントの幅と位置のみを変更できます。右? –