使用 ScrollMagic 將視差塊添加到 Drupal 8
已發表: 2022-02-16
在本教程中,我將解釋如何使用自定義塊類型在 Drupal 8 子主題中創建視差效果。
遵循這些步驟,有助於很好地理解 Drupal 8 主題。 您可以單擊此處參加我們的 Drupal 8 主題課程。
為了能夠學習本教程,您還需要安裝 Bootstrap 並從 CDN 文件夾創建一個子主題。 您可以在我們之前的帖子中按照我們的指南進行操作。
步驟1。 配置 Bootstrap 主題
視差效果通常是全寬的,因此您需要從 Bootstrap 主題菜單中打開流體容器選項。
- 轉到“外觀”並確保將 Bootstrap 主題設置為默認值。
- 輸入 Bootstrap 主題設置並選擇 Container 下拉菜單。
- 選中“流體容器”複選框。
- 單擊“保存配置”。
第2步。 創建塊
現在您需要為顯示製作一些自定義塊。 通過使用自定義塊,您可以專門為這些塊設置主題。
- 轉到結構 > 塊佈局 > 類型。
- 單擊“添加自定義塊類型”。
- 標記自定義塊“視差”:
- 現在轉到“添加自定義塊”並創建兩個塊,一個用於您正在使用的每個圖像。 我將這些塊稱為 Parallax 1 和 Parallax 2。
- 將區域設置為內容並保存塊。
現在您需要使用自定義基本塊在塊佈局頁面上的圖像之間顯示內容。 此外,刪除您放置在側邊欄中的所有塊,因為這將阻止寬度為 100%。
步驟#3。 啟用調試
- 如果您還沒有啟用調試,現在打開調試。
- 轉到 sites/default 並在第 58 行將default.services.yml複製並重命名為services.yml ,將 debug 更改為 true:
- 現在,為了能夠看到主題建議,將此代碼添加到您的 subtheme.theme 文件中:
/** * Implements hook_theme_suggestions_HOOK_alter() for form templates. * @param array $suggestions * I found this code on drupal.org https://www.drupal.org/node/2724333 * @param array $variables */ function subtheme_theme_suggestions_block_alter(array &$suggestions, array $variables) { // Block suggestions for custom block bundles. if (isset($variables['elements']['content']['#block_content'])) { array_splice($suggestions, 1, 0, 'block__bundle__' . $variables['elements']['content']['#block_content']->bundle()); } }
在彈出窗口中打開
/** * Implements hook_theme_suggestions_HOOK_alter() for form templates. * @param array $suggestions * I found this code on drupal.org https://www.drupal.org/node/2724333 * @param array $variables */ function subtheme_theme_suggestions_block_alter(array &$suggestions, array $variables) { // Block suggestions for custom block bundles. if (isset($variables['elements']['content']['#block_content'])) { array_splice($suggestions, 1, 0, 'block__bundle__' . $variables['elements']['content']['#block_content']->bundle()); } }
- 函數名稱需要與您的主題名稱相匹配。 將此添加到您的主題文件中,您可以為自定義塊設置主題。
- 刷新所有緩存,如果您現在檢查該站點,您應該會看到主題建議。
- 在 Google Chrome 中,右鍵單擊該區域並選擇 Inspect 以訪問檢查器工具:
- 在模板主題文件夾 subtheme/templates/block--bundle--parallax.html.twig 中添加視差塊的模板建議
- 將此代碼添加到模板文件中:
<div class="parallax parallax--{{ elements['#id'] }}"> <div class="parallax__bg"></div> <div class="parallax__content"> <h2{{ title_attributes }}>{{ label }}</h2> {{ content['body']['0']['#text'] | raw}} </div> </div>
在彈出窗口中打開
<div class="parallax parallax--{{ elements['#id'] }}"> <div class="parallax__bg"></div> <div class="parallax__content"> <h2{{ title_attributes }}>{{ label }}</h2> {{ content['body']['0']['#text'] | raw}} </div> </div>
- 此代碼將為您創建的視差自定義塊設置樣式。 如果需要調試,可以使用 Devel 模塊中的 kint。
步驟4。 為塊設置樣式
現在您需要添加 CSS 來設置塊的樣式。
- 打開 /css/style.css 並添加以下代碼:
.main-container, .page-header { padding: 0px; } .block-block-content2b3d7746-776f-484c-8686-c0e00a3978b6 { text-align: center; padding: 10em; font-size: 20px; background-color: #204d74; color: #fff; } .parallax { text-align: center; position: relative; overflow: hidden; height: 500px; } .parallax__bg { position: absolute; width: 100%; height: 140%; } .parallax--parallax1 .parallax__bg { background: url('../images/yourimage'); } .parallax--parallax2 .parallax__bg { background: url('../images/yourimage'); } .parallax__content { position: relative; top: 50%; -webkit-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); color: #fff; h2 { margin: 0px; font-size: 30px; } p { font-size: 20px; } }
在彈出窗口中打開
.main-container, .page-header { padding: 0px; } .block-block-content2b3d7746-776f-484c-8686-c0e00a3978b6 { text-align: center; padding: 10em; font-size: 20px; background-color: #204d74; color: #fff; } .parallax { text-align: center; position: relative; overflow: hidden; height: 500px; } .parallax__bg { position: absolute; width: 100%; height: 140%; } .parallax--parallax1 .parallax__bg { background: url('../images/yourimage'); } .parallax--parallax2 .parallax__bg { background: url('../images/yourimage'); } .parallax__content { position: relative; top: 50%; -webkit-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); color: #fff; h2 { margin: 0px; font-size: 30px; } p { font-size: 20px; } }
- 您需要更新 .block-block-content2b3d7746-776f-484c-8686-c0e00a3978b6 以匹配您的塊:

這是分配給您的自定義塊的類。 如果您以不同的方式命名 Parallax 塊,則必須更新 .parallax--parallax1 和 .parallax--parallax2。
步驟#5。 添加圖像和 ScrollMagic
- 轉到您的主題並創建一個名為 /images/ 的文件夾。 您將在此處保存圖像以獲得視差效果。
- 添加一些 Javascript 以使圖像稍微移動。 為此,您將使用 ScrollMagic。 從 GitHub 下載並提取文件:
- 現在轉到您的主題並創建一個名為 /js/ 的文件夾並將這些文件移動到該文件夾中
- 動畫.gsap.min.js
- ScrollMagic.min.js
- TweenMax.min.js
- 現在需要添加我們的自定義js add parallax.js
- 您現在需要告訴主題加載 js 庫。 為此,請打開 subtheme/subtheme.libraries.yml:
global-styling: css: theme: css/style.css: {} js: js/ScrollMagic.min.js: {} js/animation.gsap.min.js: {} js/TweenMax.min.js: {} js/parallax.js: {} dependencies: - core/drupal - core/jquery
在彈出窗口中打開
global-styling: css: theme: css/style.css: {} js: js/ScrollMagic.min.js: {} js/animation.gsap.min.js: {} js/TweenMax.min.js: {} js/parallax.js: {} dependencies: - core/drupal - core/jquery
- 最後,將此代碼添加到您的 parallax.js 文件中:
(function ($) { 'use strict'; Drupal.behaviors.myBehavior = { attach: function (context, settings) { var controller = new ScrollMagic.Controller(); var blocks = [".parallax--parallax1", ".parallax--parallax2"]; blocks.forEach(function (block, index) { var $bg = $(block).find('.parallax__bg'); var $content = $(block).find('.parallax__content'); var tl = new TimelineMax(); tl .from($bg, 2, {y: '-40%', ease: Power0.easeNone}, 0) .from($content, 1, {autoAlpha: 0, ease: Power0.easeNone}, 0.4) ; var scene = new ScrollMagic.Scene({ triggerElement: block, triggerHook: 1, duration: "100%" }) .setTween(tl) .addTo(controller); }); } } }(jQuery));
在彈出窗口中打開
(function ($) { 'use strict'; Drupal.behaviors.myBehavior = { attach: function (context, settings) { var controller = new ScrollMagic.Controller(); var blocks = [".parallax--parallax1", ".parallax--parallax2"]; blocks.forEach(function (block, index) { var $bg = $(block).find('.parallax__bg'); var $content = $(block).find('.parallax__content'); var tl = new TimelineMax(); tl .from($bg, 2, {y: '-40%', ease: Power0.easeNone}, 0) .from($content, 1, {autoAlpha: 0, ease: Power0.easeNone}, 0.4) ; var scene = new ScrollMagic.Scene({ triggerElement: block, triggerHook: 1, duration: "100%" }) .setTween(tl) .addTo(controller); }); } } }(jQuery));
- 確保您使用的圖像對於您要顯示的最大寬度足夠大。
- 現在你應該有一個很好的滾動效果,你只應用於我們的自定義塊: