【问题标题】:Best way to handle overflowing Reveal JS slide处理溢出的 Reveal JS 幻灯片的最佳方法
【发布时间】:2016-05-16 05:45:04
【问题描述】:

我正在开发一个项目,我正在使用 Reveal JS 以幻灯片的形式向用户展示数据。

有时我发现文本溢出视口。

由于此图像中显示的文本不可见


我尝试根据屏幕高度动态减小文本大小,如下所示:

var $present_section = $('section.present');
var section_bottom = $present_section.offset().top + $present_section.height();
var allowed_height = $(document).height() - $present_section.offset().top;

if (section_bottom > allowed_height) {
    var cur_font_size = parseInt($present_section.css('font-size'));
    $present_section.css('font-size', cur_font_size - 1);
}

在递归循环中运行此代码将调整<section> 的字体大小以适应文档高度。

有没有更好的方法或插件来处理这个问题而不减少幻灯片中的字符数?

【问题讨论】:

    标签: javascript html css reveal.js


    【解决方案1】:

    这是@ThairHassan 的答案的 JQuery 免费版本,如果您关心的话,这可能无法在旧浏览器上运行。

    这实际上只是@ThairHassan 答案的替代版本,我认为对我的答案的评论比这个答案更好。

    function resetSlideScrolling(slide) {
        slide.classList.remove('scrollable-slide');
    }
    
    function handleSlideScrolling(slide) {
        if (slide.scrollHeight >= 800) {
            slide.classList.add('scrollable-slide');
        }
    }
    
    Reveal.addEventListener('ready', function (event) {
        handleSlideScrolling(event.currentSlide);
    });
    
    Reveal.addEventListener('slidechanged', function (event) {
        if (event.previousSlide) {
            resetSlideScrolling(event.previousSlide);
        }
        handleSlideScrolling(event.currentSlide);
    });
    

    还有 CSS,与上面相同,但演示制作了一个深色滚动条,以防您使用深色主题。这也可能不适用于所有浏览器。

    .scrollable-slide {
        height: 800px;
        overflow-y: auto !important;
    }
    ::-webkit-scrollbar {
        width: 6px;
    }
    ::-webkit-scrollbar-track {
        -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
    }
    ::-webkit-scrollbar-thumb {
      background-color: #333;
    }
    ::-webkit-scrollbar-corner {
      background-color: #333;
    }
    

    【讨论】:

    • 谢谢你,我使用了你的答案,它有效......除了有一个小错误。在 resetSlideScolling() 函数中,当我认为它应该是 classList 上的 .remove() 时,你会执行 .add()。该错误表现在当在演示文稿中倒退时,内容被放置在顶部。更改为 .remove() 可恢复行为和滚动工作。
    • 漂亮干净的解决方案。像魅力一样工作。我将height: 800px 更改为height: 100%; 以获得更大的内容视图。谢谢。
    • 我更喜欢这个答案,因为它更普通的 JavaScript,但你的代码有一个错误!函数resetSlideScrolling 应该删除类,而不是添加额外的类。即slide.classList.remove('scrollable-slide');
    • 我的 JS/JQuery/CSS/HTML 不流利,但是我该把这段代码放在哪里呢?我尝试将它分别放在reveal.js 和reveal.css 中,但将它添加到reveal.js 似乎已经破坏了它并且幻灯片根本不会加载。有人能指出这段代码应该去哪里吗?
    【解决方案2】:

    定义 CSS 类 scrollable-slide:

    .scrollable-slide {
        height: 800px;
        overflow-y: auto !important;
    }
    

    如果幻灯片太大,定义将上述 CSS 类添加到幻灯片的侦听器。为此,您将需要 jQuery。

    function resetSlideScrolling(slide) {
        $(slide).removeClass('scrollable-slide');
    }
    
    function handleSlideScrolling(slide) {
        if ($(slide).height() >= 800) {
            $(slide).addClass('scrollable-slide');
        }
    }
    
    Reveal.addEventListener('ready', function (event) {
        handleSlideScrolling(event.currentSlide);
    });
    
    Reveal.addEventListener('slidechanged', function (event) {
        resetSlideScrolling(event.previousSlide)
        handleSlideScrolling(event.currentSlide);
    });
    

    如果您想在可滚动时去掉box-shadowbackground,请添加这些CSS 样式:

    .scrollable-slide::before {
        background: none !important;
    }
    
    .scrollable-slide::after {
        box-shadow: none !important;
    }
    

    参考资料:

    【讨论】:

    • 我在下面的回答只是对@TahirHassan 的修改,它避免使用 JQuery 并为深色主题设置样式滚动条。
    猜你喜欢
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多