【问题标题】:fullcalendar with clickable popup on hover悬停时带有可点击弹出窗口的完整日历
【发布时间】:2020-07-15 19:49:10
【问题描述】:

我需要一个像this one这样的悬停完整日历弹出窗口。

已尝试使用 qtip 的完整日历,但当鼠标离开现场时无法获得可点击的弹出窗口。

这是一个similar example,但它需要像上面的例子一样创建一个可点击的弹出窗口

$(document).ready(function() {

    var date = new Date();
    var d = date.getDate();
    var m = date.getMonth();
    var y = date.getFullYear();

    var events_array = [
        {
            title: 'Test1',
            start: new Date(2012, 8, 20),
            tip: 'Personal tip 1'
        },
        {
            title: 'Test2',
            start: new Date(2012, 8, 21),
            tip: 'Personal tip 2'
        }
    ];

    $('#calendar').fullCalendar({
        header: {
            left: 'prev,next today',
            center: 'title',
            right: 'month,agendaWeek,agendaDay'
        },
        selectable: true,
        events: events_array,
        eventRender: function(event, element) {
            element.attr('title', event.tip);
        }
    });
});

【问题讨论】:

    标签: javascript jquery calendar fullcalendar qtip


    【解决方案1】:

    使用 Bootstrap 工具提示插件 http://getbootstrap.com/javascript/#tooltips 。然后在 eventRender 回调中写入以下内容:

     eventRender: function(event, element) {
          $(element).tooltip({title: event.title});             
      }
    

    这会起作用

    【讨论】:

    • 效果很好,但我在“agendaWeek”视图中遇到了一些问题,工具提示贴在列中
    • 这个答案没有解决问题的重要部分,“当鼠标离开时无法点击弹出窗口”
    【解决方案2】:

    检查这个例子。 http://jsfiddle.net/craga89/N78hs/

    eventClick: function(data, event, view) {
                var content = '<h3>'+data.title+'</h3>' + 
                    '<p><b>Start:</b> '+data.start+'<br />' + 
                    (data.end && '<p><b>End:</b> '+data.end+'</p>' || '');
    
                tooltip.set({
                    'content.text': content
                })
                .reposition(event).show(event);
            }
    

    它适用于点击,而不是悬停,但您也可以调整它以使其在悬停时工作

    【讨论】:

    • jsfiddle 现在坏了
    【解决方案3】:
    eventMouseover: function(calEvent, jsEvent) {
        var tooltip = '<div class="tooltipevent" style="width:100px;height:100px;background:#ccc;position:absolute;z-index:10001;">' + calEvent.title + '</div>';
        $("body").append(tooltip);
        $(this).mouseover(function(e) {
            $(this).css('z-index', 10000);
            $('.tooltipevent').fadeIn('500');
            $('.tooltipevent').fadeTo('10', 1.9);
        }).mousemove(function(e) {
            $('.tooltipevent').css('top', e.pageY + 10);
            $('.tooltipevent').css('left', e.pageX + 20);
        });
    },
    
    eventMouseout: function(calEvent, jsEvent) {
         $(this).css('z-index', 8);
         $('.tooltipevent').remove();
    },
    

    【讨论】:

      【解决方案4】:

      这是我的代码

          $(document).ready(function() {
          // Setup FullCalendar
      // Setup FullCalendar
      (function() {
          var date = new Date();
          var d = date.getDate();
          var m = date.getMonth();
          var y = date.getFullYear();
      
          var tooltip = $('<div/>').qtip({
              id: 'fullcalendar',
              prerender: true,
              content: {
                  text: ' ',
                  title: {
                      button: true
                  }
              },
              position: {
                  my: 'bottom center',
                  at: 'top center',
                  target: 'mouse',
                  viewport: $('#fullcalendar'),
                  adjust: {
                      mouse: false,
                      scroll: false
                  }
              },
              show: false,
              hide: false,
              style: 'qtip-light'
          }).qtip('api');
      
          $('#fullcalendar').fullCalendar({
              editable: true,
              height: 600,
              header: {
                  left: 'title',
                  center: '',
                  right: 'today prev,next'
              },
              eventMouseover : function(data, event, view) {
                  var content = '<h3>'+data.title+'</h3>' + 
                      '<p><b>Start:</b> '+data.start+'<br />' + 
                      (data.end && '<p><b>End:</b> '+data.end+'</p>' || '');
      
                  tooltip.set({
                      'content.text': content
                  })
                  .reposition(event).show(event);
              },
              dayClick: function() { tooltip.hide() },
              eventResizeStart: function() { tooltip.hide() },
              eventDragStart: function() { tooltip.hide() },
              viewDisplay: function() { tooltip.hide() },
              events: [
                  {
                      title: 'All Day Event',
                      start: new Date(y, m, 1)
                  },
                  {
                      title: 'Long Event',
                      start: new Date(y, m, d-5),
                      end: new Date(y, m, d-2)
                  },
                  {
                      id: 999,
                      title: 'Repeating Event',
                      start: new Date(y, m, d+4, 16, 0),
                      allDay: false
                  },
                  {
                      title: 'Meeting',
                      start: new Date(y, m, d, 10, 30),
                      allDay: false
                  },
                  {
                      title: 'Birthday Party',
                      start: new Date(y, m, d+1, 19, 0),
                      end: new Date(y, m, d+1, 22, 30),
                      allDay: false
                  }
              ]
          });
      }());
          });
      
      </script>
      

      【讨论】:

        【解决方案5】:

        我在 Shopify 中使用 jQuery 进行此操作。

        我下载了引导工具提示插件,但实际上更喜欢使用 popover 插件。

        链接到必要的引导 CSS 和 JS 文件后,我得到了以下内容。如果您更愿意使用工具提示,那么您可以使用我所做的工作,但是我将其注释掉而不是弹出框。

        $(document).ready(function() {
         $('#calendar').fullCalendar({
                        defaultView: 'month',
                        //eventBackgroundColor: 'red',
                        //weekends: false,
                        eventTextColor: '#FFFFFF',
                        hiddenDays: [ 0 ],
        
                header: {
                    left: 'prev,next',
                    center: 'title',
                    right: 'month,basicWeek,'
                },
        
        //              eventRender: function(event, element) {
        //                  $(element).tooltip({title: event.description});             
        //              },
        
                eventRender: function(event, element) {
                  $(element).popover({title: event.title, content: event.description, trigger: 'hover', placement: 'auto right', delay: {"hide": 300 }});             
                },
        
                googleCalendarApiKey: 'XXXXXX',      
        
                eventSources: [
                 {//BEGINNERS ACTING FUN
                    googleCalendarId: 'XXXXX',
                    color: '#990000',   // an option!
                },
                 {//INTERMEDIATES SCENE WORK
                    googleCalendarId: 'XXXX',
                    color: 'purple',   // an option!  
                },
                   {//INTERMEDIATES SCENE WORK
                    googleCalendarId: 'XXX',
                    color: 'blue',   // an option!  
                },
        
        
                {// VOICE & COMMUNICATION SKILLS
                    googleCalendarId: 'XXXX',
                    color: 'green',   // an option!
                }
        
                ]
        
            });
        
        });
        

        【讨论】:

        • 你拯救了我的一天,伙计
        【解决方案6】:

        在 FullCalendar 版本 4 中,只有一个参数: eventRender:函数(信息)

        所以 sn-p 是:

        eventRender: function (info) {
          $(info.el).tooltip({ title: info.event.title });     
        }
        

        【讨论】:

          【解决方案7】:

          根据@Divyank Sabhaya 的 v4 解决方案更新了答案

          eventMouseEnter: function(calEvent) {
          var tooltip = '<div class="tooltipevent" style="width:auto;height:20px;vertical-align:middle;background:'+calEvent.el.style.backgroundColor+';position:absolute;z-index:10001;">' + calEvent.event._def.extendedProps.description + '</div>';
          $("body").append(tooltip);
          $(this.el).mouseover(function(e) {
              $(this.el).css('z-index', 10000);
              $('.tooltipevent').fadeIn('500');
              $('.tooltipevent').fadeTo('10', 1.9);
          }).mousemove(function(e) {
              $('.tooltipevent').css('top', e.pageY + 10);
              $('.tooltipevent').css('left', e.pageX + 20);
          });},
          
          eventMouseLeave: function(calEvent, jsEvent) {
           $(this.el).css('z-index', 8);
           $('.tooltipevent').remove();},
          

          最好的

          【讨论】:

            【解决方案8】:
                $(document).ready(function() {
                // Setup FullCalendar
            // Setup FullCalendar
            (function() {
                var date = new Date();
                var d = date.getDate();
                var m = date.getMonth();
                var y = date.getFullYear();
            
                var tooltip = $('<div/>').qtip({
                    id: 'fullcalendar',
                    prerender: true,
                    content: {
                        text: ' ',
                        title: {
                            button: true
                        }
                    },
                    position: {
                        my: 'bottom center',
                        at: 'top center',
                        target: 'mouse',
                        viewport: $('#fullcalendar'),
                        adjust: {
                            mouse: false,
                            scroll: false
                        }
                    },
                    show: false,
                    hide: false,
                    style: 'qtip-light'
                }).qtip('api');
            
                $('#fullcalendar').fullCalendar({
                    editable: true,
                    height: 600,
                    header: {
                        left: 'title',
                        center: '',
                        right: 'today prev,next'
                    },
                    eventMouseover : function(data, event, view) {
                        var content = '<h3>'+data.title+'</h3>' + 
                            '<p><b>Start:</b> '+data.start+'<br />' + 
                            (data.end && '<p><b>End:</b> '+data.end+'</p>' || '');
            
                        tooltip.set({
                            'content.text': content
                        })
                        .reposition(event).show(event);
                    },
                    dayClick: function() { tooltip.hide() },
                    eventResizeStart: function() { tooltip.hide() },
                    eventDragStart: function() { tooltip.hide() },
                    viewDisplay: function() { tooltip.hide() },
                    events: [
                        {
                            title: 'All Day Event',
                            start: new Date(y, m, 1)
                        },
                        {
                            title: 'Long Event',
                            start: new Date(y, m, d-5),
                            end: new Date(y, m, d-2)
                        },
                        {
                            id: 999,
                            title: 'Repeating Event',
                            start: new Date(y, m, d+4, 16, 0),
                            allDay: false
                        },
                        {
                            title: 'Meeting',
                            start: new Date(y, m, d, 10, 30),
                            allDay: false
                        },
                        {
                            title: 'Birthday Party',
                            start: new Date(y, m, d+1, 19, 0),
                            end: new Date(y, m, d+1, 22, 30),
                            allDay: false
                        }
                    ]
                });
            }());
                });
            
            </script>
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-12-18
              • 1970-01-01
              相关资源
              最近更新 更多