プレゼンテーションがreveal.jsで実行されている間にスライドを追加/削除することはできますか?正確に言えば、それとも多少の厄介な回避策のためのAPIはありますか?Reveal.JSのスライドを動的に追加/削除する
答えて
今後のプロジェクトでもこれについて興味がありました。周りを見回して何も見つかりませんでしたので、私は自分のプロジェクトのために何かを書いて、最後に追加しました。現在のスライドの後にスライドを追加するのはかなり簡単です。セクション要素を '.slides'に追加し、セクションに 'future'クラスがあることを確認してください。また、最後のスライドにいる場合は、 '.navigate-right'に 'enabled'クラスを追加する必要があります。現在のスライドの前に何かを追加すると、番号付けが乱れるので、クラス 'past'で追加してから次のスライドに移動する必要があります。
「スライド」を削除すると同じことが起こりますが、「.past」スライドを削除すると番号が間違ってしまいます。私は自分のコードをうまくテストしていないので(まだ)、それをテストとしてうまく使用すればよい。
Reveal.addEventListener('ready', function(event) {
Reveal.add = function(content = '',index = -1){
dom = {},
dom.slides = document.querySelector('.reveal .slides');
var newSlide = document.createElement('section');
if(index === -1) { //adding slide to end
newSlide.classList.add('future');
dom.slides.appendChild(newSlide);
document.querySelector('.navigate-right').classList.add('enabled'); //just enable it, even if it is
} else if(index > Reveal.getIndices().h) {
newSlide.classList.add('future');
dom.slides.insertBefore(newSlide,dom.slides.querySelectorAll('section:nth-child('+(index+1)+')')[0]);
} else if(index <= Reveal.getIndices().h) {
newSlide.classList.add('past');
dom.slides.insertBefore(newSlide,dom.slides.querySelectorAll('section:nth-child('+(index+1)+')')[0]);
Reveal.next();
}
newSlide.innerHTML = content;
};
Reveal.remove = function(index = -1){
dom = {},
dom.wrapper = document.querySelector('.reveal');
dom.slides = document.querySelector('.reveal .slides');
var target = (dom.wrapper.querySelectorAll('.slides > section:nth-child('+(index+1)+')')[0]) ? dom.wrapper.querySelectorAll('.slides > section:nth-child('+(index+1)+')')[0] : false;
if(index === -1) {
if (Reveal.isLastSlide()) Reveal.prev();
dom.slides.removeChild(dom.wrapper.querySelectorAll('.slides > section')[dom.wrapper.querySelectorAll('.slides > section').length-1]);
if (Reveal.isLastSlide()) document.querySelector('.navigate-right').classList.remove('enabled');
} else if(index > Reveal.getIndices().h && target) {
dom.slides.removeChild(target);
if (Reveal.getIndices().h == dom.wrapper.querySelectorAll('.slides > section').length-1) document.querySelector('.navigate-right').classList.remove('enabled');
} else if(index < Reveal.getIndices().h && target) {
dom.slides.removeChild(target);
location.hash = '/'+parseInt(Reveal.getIndices().h-1);
} else if(index == Reveal.getIndices().h && target) {
if (index == 0) {
Reveal.next();
document.querySelector('.navigate-left').classList.remove('enabled');
} else Reveal.prev();
dom.slides.removeChild(target);
if(dom.wrapper.querySelectorAll('.slides > section').length == index) document.querySelector('.navigate-right').classList.remove('enabled');
}
};
});
これを使用する場合は、Reveal.initialize({...})の後に追加します。
Reveal.add(コンテンツ、インデックス)、またはReveal.remove(インデックス)を使用して呼び出します。
Reveal.add('<h3>Slide title</h3>')
は冒頭で、最後のスライドとして
Reveal.add('<h3>Slide title</h3>',0)
ていることに追加します。
Reveal.add('<h3>Slide title</h3>',3)
は、3番目の場所に追加します。
Reveal.remove()は、最後のスライドReveal.remove(n)を削除します(存在する場合)。このため
私の問題を回避するには、にした
初期化すると、空の
section
タグと明らかにしました。HTML
<div class="reveal"> <div class="slides"> <section>Single Horizontal Slide</section> <section id="blank"></section><!-- Blank slug --> </div> </div>
Javascriptを
Reveal.initialize(); //slide deck wrapper deck = $('#blank').parent();
店このタグその後、DOMから削除します。
// a blank is initialized and stored as a variable wrap = $('#blank').clone() .attr('id',null) .prop('outerHTML'); // remove the blank $('#blank').remove();
最後に新しい要素をデッキに加えて、空のタグに包まれています。ここで
$('<h1>Slide added</h1>').appendTo(deck) .wrap(wrap);
はdemoです。私は複雑な設定でこのテクニックを試していませんが、簡単なプレゼンテーションではこれで十分です。
Reveal.sync()
が王様です。
スライドを動的に削除できます。ここ
は完全な例である:ここCollaboFramework
はremoving all slidesの例である:ここ
var presentation = $('#presentation');
var slides = $('#presentation .slides');
slides.empty();
は、値引きされadding a new slide
// slide 1
var section = $("<section></section>");
slides.append(section);
section.attr('data-markdown', '');
var script = $("<script></script>");
section.append(script);
script.attr('type', 'text/template');
var slideContent =
"and here is the image\r\n" +
"<img src='https://cdn.psychologytoday.com/sites/default/files/field_blog_entry_images/flower-887443_960_720.jpg' width='200px' height='200px'>\r\n" +
"and here is the list\r\n" +
"+ hopa\r\n" +
"+ cupa\r\n" +
"+ and some intended links\r\n" +
" + [CS link](http://www.CollaboScience.com)\r\n" +
" + [CA link](http://www.CollaboArte.com)\r\n" +
" + [CF link](https://github.com/Cha-OS/KnAllEdge/)\r\n";
script.html(slideContent);
の一例ですスライドが、HTMLでも同様ですが、 generic slide creation
もちろん、実際のgithubコードでは、タスクが完了したことを確認する前に(コールバックを使用して)タグを待機させるのに時間がかかることがわかります。
最後に、あなたはマークダウンプラグインで再レンダリングのアパートはちょうどReveal.sync()
を使用しているupdate Reveal、する必要があります。
これは、あなたのためにすべてのクラスジャグリング、スライド番号の再計算などを行います。Reveal.slide(0)
を行うことが他に唯一重要なのは、スライド2枚を外した場合。
- 1. 動的フォーム入力の追加/削除
- 2. 動的入力フィールドの追加/削除
- 3. パネルの動的な追加と削除
- 4. ルータのアクタに経路を動的に追加/削除する
- 5. セロリ内のワーカープールにスレッドを動的に追加/削除する
- 6. div内のスライドの削除クラスを追加する
- 7. テキストフィールドを追加し、動的削除ボタンでテキストフィールドを削除
- 8. jQueryブートストラップ動的タブ(追加と削除)
- 9. テーブルの行を動的に追加/削除する
- 10. 動的に追加されたコントロールのバリデータを削除する
- 11. d3(v4)の線グラフを動的に追加/削除する
- 12. 動的にASP.NETで表の行を追加/削除する
- 13. 動的に表の行を追加して削除する
- 14. jquery動的にコードのセクションを追加/削除する
- 15. JavaScriptでテーブルの削除と追加を動的に追加する
- 16. アクションでページにコンポーネントを動的に追加/削除する
- 17. Angular2フォームにコントロールを動的に追加/削除する
- 18. JQM:navbarにアイコンを動的に追加/削除する
- 19. 入力を動的に追加および削除する
- 20. Owl Carousel - アイテムを動的に追加/削除する
- 21. ボタンを動的に追加または削除する方法
- 22. 動的に追加されたdivを削除するjavacript
- 23. Authenticator/Interceptorを動的に追加/削除する
- 24. フィールドを動的に追加/削除するdjango
- 25. jqueryでdivを動的に追加および削除する
- 26. Jqueryクラスを動的に追加および削除する
- 27. 動的にフォーム要素を追加/削除するmysqlサポート
- 28. 妥当性検査ルールを動的に追加/削除する
- 29. 動的に追加された_parent_ divを削除する
- 30. JSF2/Primefacesでコンポーネントを動的に追加/削除する
このアドオンの背景はありますか? –
私はこのコードを動作させるために取り組んできました。私のために微調整が必要なことはたくさんありますが、最大の機能は各関数の最後に 'this.sync();'を追加することです。これにより、reveal.jsは背景などを含むすべての内部構造を更新します –
上記の方法を使ってreveal.jsを拡張したライブラリを作成しました(まだ公開しています):[reveal-add-remove.js](https ://github.com/mpelikan/reveal-add-remove.js)。ありがとう@メーソン。 –