最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于React封裝一個層次模糊效果的容器組件

 更新時間:2024年03月21日 11:19:42   作者:慕仲卿  
這篇文章主要為大家詳細介紹了如何基于React封裝一個層次模糊效果的容器組件,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

繪制H5頁面時,模糊效果(或稱為毛玻璃效果)被廣泛用于增強用戶界面的美觀性和層次感。這種效果不僅可以吸引用戶的注意,還能提供視覺上的分隔,而不完全阻擋背后的內容?;诖耍疚姆庋b一個React組件,該組件能夠在容器上實現層次化的模糊效果,使得開發(fā)者可以輕松地在其項目中應用并自定義這種設計風格。

先放效果圖:

需求分析

該組件需要滿足以下幾個基本需求:

  • 可自定義模糊層數:組件應允許用戶設置模糊效果的層數,以便于調整模糊效果的精度和深度。
  • 可自定義模糊強度:用戶應能夠設置模糊的最大強度,以控制最外層的模糊程度。
  • 可自定義容器尺寸和形狀:包括容器的高度和邊框圓角半徑。
  • 自定義類名:允許用戶添加自定義類名,以便于在外部CSS文件中進一步樣式定制。

構建過程

基于上述需求,我們設計了HcBlurBox組件。下面是構建此組件的具體步驟:

1. 設置組件接收的Props

首先,我們定義組件能夠接收的props,包括:

  • accuracy(模糊層數)
  • radius(邊框圓角半徑)
  • height(容器高度)
  • maxBlur(最大模糊值)
  • ratio(高度比率)
  • className(自定義類名)

2. 計算模糊層樣式

對于每一個模糊層,我們根據傳入的accuracy、maxBlurratio來動態(tài)計算其高度和模糊度。使用Array(accuracy).fill(0).map來創(chuàng)建指定數量的模糊層,并為每層應用以下樣式規(guī)則:

  • 高度(height):根據ratioaccuracy計算得出的每層的高度百分比。
  • 模糊效果(backdropFilter):使用CSS的blur()函數,根據層的順序和maxBlur來動態(tài)計算模糊度。

3. 條件渲染

為了確保組件的靈活性和健壯性,我們在沒有提供height屬性時讓組件返回null,以避免渲染不必要的DOM元素。

4. 應用樣式和自定義類名

最后,我們將計算得到的樣式應用到每個模糊層上,并通過${className}模板字符串將用戶提供的自定義類名添加到容器div上,以實現進一步的樣式自定義。

完整代碼展示

import React from "react";
import "./index.less";

/**
 * 創(chuàng)建一個具有層次模糊效果的容器組件。
 *
 * @component
 * @param {Object} props - 組件接收的props。
 * @param {number} [props.accuracy=2] - 精度,決定模糊層的數量。
 * @param {number} [props.radius=5] - 模糊層的邊框圓角半徑。
 * @param {number} props.height - 容器的高度,必須提供。
 * @param {number} [props.maxBlur=12.5] - 最大模糊值。
 * @param {number} [props.ratio=100] - 高度比率,用于計算每個模糊層的高度百分比。
 * @param {string} [props.className=''] - 容器的自定義類名。
 * @returns {ReactElement|null} 返回一個模糊效果的React組件,如果沒有提供高度,則返回null。
 *
 * @example
 * <HcBlurBox height={100} accuracy={3} maxBlur={15} className="custom-class" />
 */
const HcBlurBox = (props) => {
  const { 
    accuracy = 2, 
    radius = 5, 
    height, 
    maxBlur = 12.5, 
    ratio = 100,
    className = '',
  } = props;

  // 如果沒有提供高度,則不渲染組件
  if(!height) return null;

  return (
    <div className={`hc-blur-box-container ${className}`}>
      {Array(accuracy).fill(0).map(
        (v, i) => {
          const step = i + 1;
          const _height = ratio - (100 / accuracy) * i; // 計算每個模糊層的高度百分比
          const blur = `blur(${(maxBlur / accuracy) * step}px)`; // 根據精度和步驟計算模糊效果
          // 如果計算得到的高度小于2倍的height,則不渲染該層
          if (2 * radius > _height * height / 100) return null;
          return (
            <div
              key={i} // 添加key以滿足React列表渲染的要求
              className="hc-blur-box"
              style={{
                height: `${_height}%`, // 設置模糊層的高度
                backdropFilter: blur, // 應用模糊效果
                borderBottomLeftRadius: radius, // 設置邊框圓角半徑
                borderBottomRightRadius: radius,
              }}
            />
          )
        }
      )}
    </div>
  )
}

export default HcBlurBox;
.hc-blur-box-container {
  position: absolute;
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;

  .hc-blur-box {
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    backdrop-filter: blur(2.5px);
    mask: linear-gradient(to top, rgb(0, 0, 0) 50%, rgba(0, 0, 0, 0.8) 70%, rgba(0, 0, 0, 0) 100%);
    background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.64) 100%);
    z-index: 1;
    border: none ;
  }
}

通過HcBlurBox組件,開發(fā)者可以輕松在其React項目中實現具有層次模糊效果的容器,大大豐富了界面的視覺效果和用戶體驗。此組件的靈活性和可定制性,使其能夠適應各種設計需求。

兼容方案

上述代碼雖然能夠完成最終效果,但是有的瀏覽器不支持mask css屬性,這個時候,只需要通過絕對定位和父容器等大的div去模擬mask的效果就可以了。以下的代碼是兼容組件,當然你喜歡的話可以將兩個組件融合成一個。

兼容組件

import React from "react";
import "./index.less"; // 引入樣式文件

const DoubleLayeredDiv = () => {
  return (
    <div className="container">
      {[...Array(10).keys()].map((index) => (
        <div
          key={index}
          className={`background-image img${index + 1}`}
          style={{
              background-position-y: -10*(index+1); 
              filter: `blur(${index+1}px)`; 
              bottom: -10*(index+1);
          }}
        ></div>
      ))}
      <div className="gradient-overlay"></div>
      <div className="content">Your Content Here</div>
    </div>
  );
};

export default DoubleLayeredDiv;

對應的樣式文件 (index.less)

.container {
  margin: auto;
  margin-top: 200px;
  position: relative;
  width: 400px;
  height: 600px;
  overflow: hidden;
  border-radius: 30px;
  box-shadow: 0 0 20px 0px;
  background-image: url('./page1.jpg');
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
}
.background-image {
  width: 100%;
  height: 600px;
  background-image: url('./page1.jpg');
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
  position: absolute;
  left: 0;
  z-index: 1;
}

.gradient-overlay {
  width: 100%;
  height: 500px;
  background-image: linear-gradient(to top, black, transparent);
  position: absolute;
  bottom: 0;
  left: 0;
  z-index: 2;
}
.content {
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 3;
  display: flex;
  justify-content: center;
  align-items: center;
  color: white;
  font-size: 20px;
}

兼容backdrop-filter

雖然現代瀏覽器普遍支持CSS的backdrop-filter屬性來實現模糊效果,但是并非所有瀏覽器都支持(特別是舊版瀏覽器)。對于不支持backdrop-filter屬性的瀏覽器,我們可以采取以下兼容性方案:

  • 使用多層圖片疊加:如上述組件所示,通過創(chuàng)建多個帶有不同模糊度的圖層(使用filter: blur()),我們可以在不支持backdrop-filter的環(huán)境下模擬出類似的視覺效果。
  • 使用靜態(tài)模糊背景圖片:為了進一步兼容那些連filter屬性也不支持的古老瀏覽器,可以預先生成一張模糊的背景圖片,并在需要時作為備選方案使用。
  • 優(yōu)雅降級:對于極端的兼容性需求,可以考慮在不支持模糊效果的瀏覽器中簡單隱藏這些效果,保留基本的內容展示。這可以通過JavaScript檢測特定CSS屬性的支持情況來實現。

總之,雖然完全的跨瀏覽器兼容性往往難以實現,但通過巧妙地利用CSS和JavaScript,仍然可以為大多數用戶提供接近設計意圖的體驗,同時為那些使用舊瀏覽器的用戶提供可接受的備選方案。

到此這篇關于基于React封裝一個層次模糊效果的容器組件的文章就介紹到這了,更多相關React層次模糊容器組件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • React JSX基礎語法教程示例

    React JSX基礎語法教程示例

    這篇文章主要為大家介紹了React JSX基礎語法教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • React onClick/onChange傳參(bind綁定)問題

    React onClick/onChange傳參(bind綁定)問題

    這篇文章主要介紹了React onClick/onChange傳參(bind綁定)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • React如何使用localStorage及實現刪除筆記操作過程

    React如何使用localStorage及實現刪除筆記操作過程

    這篇文章主要介紹了React如何使用localStorage及實現刪除筆記操作過程,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2024-12-12
  • React hooks使用方法全面匯總

    React hooks使用方法全面匯總

    這篇文章主要介紹了react hooks實現原理,文中給大家介紹了useState dispatch函數如何與其使用的Function Component進行綁定,實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • 一文詳解React組件API

    一文詳解React組件API

    這篇文章主要介紹了React的組件API,及組件API的用法詳解,文中有詳細的代碼示例,對學習或工作有一定的參考價值,感興趣的同學可以閱讀本文
    2023-04-04
  • React Native中ScrollView組件輪播圖與ListView渲染列表組件用法實例分析

    React Native中ScrollView組件輪播圖與ListView渲染列表組件用法實例分析

    這篇文章主要介紹了React Native中ScrollView組件輪播圖與ListView渲染列表組件用法,結合實例形式詳細分析了ScrollView組件輪播圖與ListView渲染列表組件具體功能、使用方法與操作注意事項,需要的朋友可以參考下
    2020-01-01
  • React Hooks中模擬Vue生命周期函數的指南

    React Hooks中模擬Vue生命周期函數的指南

    React Hooks 提供了一種在函數組件中使用狀態(tài)和其他 React 特性的方式,而不需要編寫類組件,Vue 的生命周期函數和 React Hooks 之間有一定的對應關系,本文給大家介紹了React Hooks中模擬Vue生命周期函數的指南,需要的朋友可以參考下
    2024-10-10
  • react清空ant.design中表單內容的方法實現

    react清空ant.design中表單內容的方法實現

    本文主要介紹了react清空ant.design中表單內容的方法實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-12-12
  • React中使用Echarts無法顯示title、tooltip等組件的解決方案

    React中使用Echarts無法顯示title、tooltip等組件的解決方案

    這篇文章主要介紹了React中使用Echarts無法顯示title、tooltip等組件的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • react裝飾器與高階組件及簡單樣式修改的操作詳解

    react裝飾器與高階組件及簡單樣式修改的操作詳解

    這篇文章主要介紹了react裝飾器與高階組件及簡單樣式修改的操作,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-09-09

最新評論

乐昌市| 兴隆县| 宝应县| 稻城县| 井研县| 和林格尔县| 巴南区| 冀州市| 板桥市| 萨迦县| 富平县| 孝昌县| 静宁县| 英山县| 鄂尔多斯市| 遂昌县| 开封县| 汤阴县| 顺昌县| 岳西县| 乌兰浩特市| 深州市| 合江县| 宁城县| 绵阳市| 满城县| 遂平县| 沿河| 醴陵市| 兰考县| 德令哈市| 巨野县| 南昌县| 崇信县| 东乌珠穆沁旗| 赣榆县| 垫江县| 承德县| 林口县| 沾益县| 乐都县|