整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          元素出現在視圖中時觸發的js

          素出現在視圖中時觸發的JavaScript:Intersection Observer API簡介

          在前端開發中,有時我們需要在元素進入視圖時觸發特定的操作。無論是實現懶加載圖片、無限滾動,還是統計廣告曝光率,Intersection Observer API 都提供了一種高效且簡便的解決方案。本文將詳細介紹 Intersection Observer API 的使用,并通過一個示例展示如何在元素出現在視圖中時觸發 JavaScript 操作。

          什么是Intersection Observer API?

          Intersection Observer API 是一種異步觀察目標元素與其祖先元素(或頂級文檔視口)交叉狀態變化的機制。通過這個API,可以輕松實現以下功能:

          • 懶加載圖片或其他資源
          • 實現無限滾動效果
          • 統計元素在視圖中的可見性
          • 觸發動畫效果

          基本使用步驟

          1. 創建觀察者實例:使用 IntersectionObserver 構造函數創建一個觀察者實例,并指定回調函數。
          2. 指定觀察選項:通過選項對象指定根元素、根元素的內邊距和觸發回調的閾值。
          3. 觀察目標元素:調用觀察者實例的 observe 方法,傳入要觀察的目標元素。

          示例:元素出現在視圖中時觸發操作

          下面是一個完整的示例代碼,當目標元素出現在視圖中時觸發數據加載操作。

          html
          復制代碼
          <!DOCTYPE html>
          <html lang="en">
          <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Intersection Observer Demo</title>
            <style>
              .container {
                height: 100vh;
                overflow-y: scroll;
              }
              .box {
                height: 100px;
                margin: 20px;
                background-color: lightblue;
              }
              #target {
                height: 100px;
                margin: 20px;
                background-color: lightcoral;
              }
            </style>
          </head>
          <body>
            <div class="container" ref="tableContainer">
              <div class="box">Box 1</div>
              <div class="box">Box 2</div>
              <div class="box">Box 3</div>
              <div id="target">Target Element</div>
              <div class="box">Box 4</div>
              <div class="box">Box 5</div>
            </div>
          
            <script>
              document.addEventListener('DOMContentLoaded', function () {
                function handleIntersection(entries) {
                  entries.forEach(entry => {
                    if (entry.isIntersecting) {
                      console.log('Target element is in view!');
                      // 這里可以添加你希望執行的操作,例如加載數據
                      getTableData();
                    }
                  });
                }
          
                function getTableData() {
                  console.log('Fetching table data...');
                  // 模擬數據加載
                  setTimeout(() => {
                    console.log('Data loaded');
                  }, 1000);
                }
          
                function initIntersectionObserver() {
                  const options = {
                    root: null,
                    rootMargin: "0px",
                    threshold: 0.1
                  };
          
                  const observer = new IntersectionObserver(handleIntersection, options);
                  const target = document.getElementById('target');
          
                  if (target) {
                    observer.observe(target);
                  }
                }
          
                initIntersectionObserver();
              });
            </script>
          </body>
          </html>
          

          代碼說明

          1. HTML結構:包含一個可滾動的容器和幾個元素,其中一個元素具有 id="target",是我們要觀察的目標元素。
          2. CSS樣式:簡單的樣式來設置容器和元素的高度、顏色等。
          3. JavaScript邏輯
          4. handleIntersection(entries):回調函數,當目標元素進入或離開視圖時被調用。在這里,我們在控制臺打印一條消息并調用 getTableData 函數模擬數據加載。
          5. initIntersectionObserver():初始化 Intersection Observer,設置觀察選項,并開始觀察目標元素。

          總結

          Intersection Observer API 提供了一種高效的方式來檢測元素是否出現在視圖中,并觸發相應的操作。通過合理地使用該API,可以顯著提高頁面性能和用戶體驗。希望本文能幫助你理解并應用 Intersection Observer API,在實際項目中靈活實現各種效果。如果你有任何問題或建議,歡迎在評論區留言討論。

          參考文檔

          • MDN Web Docs: Intersection Observer API
          • W3C Intersection Observer Specification

          希望這篇文章對你有所幫助!Happy Coding!


          原文:https://juejin.cn/post/7381348874449698825

          述內容針對本人的 blog 引用程序創建二零視圖和URL, 下面將添加模板,并以用戶友好的方式顯示帖子。

          接下來在blog 應用程序目錄中創建下列目錄和文件:

          templates/
               blog/
                     base.html
             post/
                  list.html
                 detail.html

          上述結構將表示模板的文件結構。其中,base.html 文件包含了站點的HTML 主結構,并將內容劃分為主內容區域和側欄。list.html 和 detail.html 文件繼承自base.html 文件,分別用于渲染博客帖子列表以及詳細視圖。

          Django包含了功能強大的模板語言,并可確定數據的顯示方式。該語言基于模板標簽、模板變量以及模板過濾器,如下所示:

          • 模板標簽負責控制模板的渲染,形如 {% tag %}
          • 當模板被渲染時,模板變量被替換為對應值,形如{{ variable }}
          • 模板過濾器可針對顯示調整變量,形如 {{ variable| filter }}

          讀者可以訪問 https://docs.djangoproject.com/en/3.0/ref/templates/builtins/,以查看全部內建的模板標簽和過濾器。

          下面有關編輯 base.html 和 list.html 和 detail.html 還需讀者們自行完成,這里本人就不再展示。

          其中{% load static %}的作用是通知Django 加載 django.contrib.staticfiles應用程序提供的靜態模板標簽,該標簽位于 INSTALLED_APPS 設置項中。

          {% extends "blog/base.html" %}的作用是通知Django 繼承 blog/base.html 模板。

          一切完成后,讀者可以返回瀏覽器中刷新,單擊帖子標題以查看帖子的詳細視圖。

          感謝大家的查看與支持。

          一篇文章講解“視圖-過濾”,本篇文章講解“視圖-模板引擎”。


          內置模板引擎

          視圖的模板文件可以支持不同的解析規則,默認情況下無需手動初始化模板引擎。

          可以通過下面的幾種方式對模板引擎進行初始化。

          1. 配置文件

          ThinkPHP5.0版本與ThinkPHP5.1版本的目錄結構有所變動,因此兩個版本的模板設置配置項位置不同

          ①ThinkPHP5.0版本模板引擎的參數在配置項文件(config.php)中。

          ②ThinkPHP5.1版本內置模板引擎的參數統一在配置目錄的template.php文件中配置。

          2. 視圖根目錄

          注:以下以ThinkPHP5.1版本作為示例

          1)視圖文件的根目錄默認情況下位于模塊的view目錄,每個模塊的視圖目錄可以通過模板參數view_path自定義。

          ①將模板位置設置到根目錄下的viewport文件夾下,在config/template.php文件中進行設置。

          ②創建Index控制器,并新建index方法

          ③在根目錄的viewport/index/下新建index.html模板

          預覽:

          2)可以用view_base模板引擎參數定義全局的視圖根目錄,然后模塊作為子目錄。

          ①在config/template.php文件中定義view_base

          訪問Index控制器的index方法,預覽:

          提示模板文件不存在,并指出模板路徑“../template/index/index/index.html”。

          ②在“../template/index/index/”下創建index.html模板

          訪問Index控制器index方法,預覽:

          注意:

          1. view_base與view_path的區別:

          ①view_base的優先級高于view_path

          ②view_base定義全局視圖根目錄,模塊為子目錄,例設置view_base值為“../template/”,模板路徑為“../template/index/index/index.tml”,意義為:全局根目錄template下的index模塊的index控制器的index.html模板。

          ③view_path定義模塊下的視圖目錄,例設置view_path值為“../viewport/”,模板路徑為:“../viewport/index/index.html”,意義為視圖目錄viewport下的index控制器的index.html模板。當訪問其他模塊index控制器的index.html模板時,訪問的是同一個,都是“../viewport/index/index.html”。

          3. 調用engine方法初始化

          視圖類也提供了engine方法對模板解析引擎進行初始化或者切換不同的模板引擎。

          ①在Index控制器中,新建vEngine方法

          訪問預覽:

          注意:

          1. 表示當前視圖的模板文件使用原生php進行解析。

          ②在view/index/下新建index.php文件

          預覽:


          使用第三方模板引擎

          官方擴展庫中提供了一個類似于angularjs語法的模板引擎think-angular,具體可以參考參考手冊:

          另外還包括了一個twig模板引擎擴展:

          ThinkPHP5連載為卓象程序員原創,轉載請聯系卓象程序員

          關注卓象程序員,定期發布技術文章

          下一篇講解“數據庫”


          主站蜘蛛池模板: 国产人妖视频一区二区破除| 精品成人一区二区三区四区| 久久综合亚洲色一区二区三区| 福利一区二区三区视频在线观看 | 日本一区二区三区不卡视频中文字幕| 亚洲一区二区三区免费观看| 国产伦精品一区二区三区女| 亚洲AV无码一区二区三区鸳鸯影院| 糖心vlog精品一区二区三区| 精品女同一区二区三区免费播放| 丰满人妻一区二区三区视频53 | 无码人妻精品一区二区三18禁| 亚洲综合在线成人一区| 美日韩一区二区三区| 中文人妻av高清一区二区| 久久中文字幕无码一区二区| 亚洲午夜日韩高清一区| 国产福利一区二区三区视频在线| 精品中文字幕一区二区三区四区| 久久综合精品不卡一区二区 | 视频一区二区在线播放| 亚洲AV综合色一区二区三区| 精品无码国产一区二区三区麻豆| 国产高清一区二区三区四区| 亚洲国产成人精品无码一区二区| 秋霞电影网一区二区三区| 亚州日本乱码一区二区三区| 国产一区二区三区樱花动漫| 人妻久久久一区二区三区| 一区二区三区视频在线播放| 国产精品久久久久久麻豆一区| 日本在线电影一区二区三区| 亚洲一区综合在线播放| 亚洲国产精品成人一区| 无码人妻精品一区二区三区久久久 | 91久久精品午夜一区二区| 精品中文字幕一区二区三区四区| 久久国产视频一区| 无码人妻精品一区二区蜜桃AV| 蜜臀AV一区二区| 亚洲日韩精品一区二区三区无码|