uni-app 安卓开启高斯模糊(blurEffect)页面闪烁

uni-app 安卓开启高斯模糊(blurEffect)页面闪烁

开发环境 版本号 项目创建方式
Windows win 11 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Windows

HBuilderX类型:正式

HBuilderX版本号:4.12

手机系统:Android

手机系统版本号:Android 14

手机厂商:小米

手机机型:14

页面类型:vue

vue版本:vue3

打包方式:云端

项目创建方式:HBuilderX

示例代码:

{
    "leftWindow": {
        "path": "windows/left-window.vue",
        "style": {
            "width": "300px",
            "position": "sticky",
            "top": "0"
        }
    },
    "topWindow": {
        "path": "windows/top-window.vue",
        "style": {
            "height": "60px"
        }
    },
    "pages": [
        {
            "path": "pages/tabBar/Market/Market",
            "style": {
                "navigationBarTitleText": "行情",
                "app-plus": {
                    "bounce": "none"
                }
            }
        },
        {
            "path": "pages/tabBar/Account/Account",
            "style": {
                "navigationBarTitleText": "产品",
                "app-plus": {
                    "bounce": "none"
                }
            }
        },
        {
            "path": "pages/tabBar/Group/Group",
            "style": {
                "navigationBarTitleText": "组合"
            }
        },
        {
            "path": "pages/tabBar/position/position",
            "style": {
                "navigationBarTitleText": "持仓"
            }
        },
        {
            "path": "pages/tabBar/Personal/Personal",
            "style": {
                "navigationBarTitleText": "我的"
            }
        },
        {
            "path": "pages/views/login/login",
            "style": {
                "navigationBarTitleText": "登录",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/views/search/search",
            "style": {
                "navigationBarTitleText": "",
                "enablePullDownRefresh": false,
                "app-plus": {
                    "animationType": "slide-in-right",
                    "animationDuration": 300
                }
            }
        }
    ],
    "globalStyle": {
        "navigationStyle": "custom",
        "pageOrientation": "portrait",
        "navigationBarTitleText": "219",
        "navigationBarTextStyle": "white",
        "navigationBarBackgroundColor": "#007AFF",
        "backgroundColor": "#F8F8F8",
        "backgroundColorTop": "#F4F5F6",
        "backgroundColorBottom": "#F4F5F6",
        "mp-360": {
            "navigationStyle": "custom"
        },
        "h5": {
            "navigationBarTextStyle": "black",
            "navigationBarBackgroundColor": "#F1F1F1"
        }
    },
    "tabBar": {
        "color": "#D1D1D1",
        "blurEffect": "none",
        "selectedColor": "#13227A",
        "borderStyle": "black",
        "list": [
            {
                "pagePath": "pages/tabBar/Market/Market",
                "iconPath": "static/icon/nav/AAVE.png",
                "selectedIconPath": "static/icon/nav/AAVE_1.png",
                "text": "行情"
            },
            {
                "pagePath": "pages/tabBar/Account/Account",
                "iconPath": "static/icon/nav/index.png",
                "selectedIconPath": "static/icon/nav/index_1.png",
                "text": "账户"
            },
            {
                "pagePath": "pages/tabBar/Group/Group",
                "iconPath": "static/icon/nav/Group.png",
                "selectedIconPath": "static/icon/nav/Group_1.png",
                "text": "组合"
            },
            {
                "pagePath": "pages/tabBar/Position/Position",
                "iconPath": "static/icon/nav/Position.png",
                "selectedIconPath": "static/icon/nav/Position_1.png",
                "text": "持仓"
            },
            {
                "pagePath": "pages/tabBar/Personal/Personal",
                "iconPath": "static/icon/nav/my.png",
                "selectedIconPath": "static/icon/nav/my_1.png",
                "text": "我的"
            }
        ]
    }
}

操作步骤:

pages.json —> tabbar ----> “blurEffect”: “extralight”,

安卓开启高斯模糊页面 滚动闪烁

详见zip 文件


## 预期结果:

pages.json ---> tabbar ----> "blurEffect": "extralight", 

安卓开启高斯模糊页面 正常

实际结果:

pages.json —> tabbar ----> “blurEffect”: “extralight”,

安卓开启高斯模糊页面 滚动闪烁

详见zip 文件


## bug描述:

pages.json ---> tabbar ----> "blurEffect": "extralight", 

安卓开启高斯模糊页面 滚动闪烁  

详见zip 文件

更多关于uni-app 安卓开启高斯模糊(blurEffect)页面闪烁的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

vue页面使用webview渲染目前部分内核版本无法适配毛玻璃效果。特别是使用position: sticky;已经position: absolute;的元素,暂时没有解决方案。 临时方案: 1。 使用nvue页面,原生渲染适配毛玻璃效果兼容性更好。 2。 vue页面尽量避免position: sticky;position: absolute;的元素

更多关于uni-app 安卓开启高斯模糊(blurEffect)页面闪烁的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在 Uni-app 中实现高斯模糊效果时,可能会遇到页面闪烁的问题,尤其是在安卓设备上。以下是可能的原因及解决方法:


问题原因

  1. 性能问题
    • 高斯模糊是一个计算密集型操作,尤其是在安卓设备上,如果性能不足,可能会导致页面渲染卡顿或闪烁。
  2. 渲染机制
    • 安卓设备的渲染机制与 iOS 不同,可能会对高斯模糊的处理方式不同,导致页面闪烁。
  3. 频繁重绘
    • 如果高斯模糊区域需要频繁重绘(例如背景动态变化),可能会导致页面闪烁。

解决方法

1. 优化高斯模糊实现

  • 使用原生插件或第三方库实现高斯模糊,而不是纯 CSS 或 JavaScript 实现,以提高性能。
  • 推荐使用 uni-app 插件市场中的高斯模糊插件,例如 uni-blur
  • 如果使用 CSS 实现高斯模糊,可以尝试以下代码:
    .blur-effect {
        backdrop-filter: blur(10px);
        -webkit-backdrop-filter: blur(10px);
        background-color: rgba(255, 255, 255, 0.5); /* 调整透明度 */
    }
    

    注意:backdrop-filter 在部分安卓设备上可能不支持或性能较差。

2. 减少高斯模糊区域

  • 仅对需要模糊的区域应用高斯模糊,而不是整个页面。
  • 使用静态图片作为模糊背景,而不是实时计算模糊效果。

3. 使用图片替代实时模糊

  • 如果背景是固定的,可以提前生成一张模糊后的图片,直接使用图片作为背景,避免实时计算。

4. 启用硬件加速

  • 在 CSS 中启用硬件加速,可以改善渲染性能:
    .blur-effect {
        transform: translateZ(0);
        will-change: transform;
    }
    

5. 减少页面重绘

  • 避免在高斯模糊区域频繁更新内容或样式。
  • 使用 v-ifv-show 控制高斯模糊元素的显示与隐藏,减少不必要的渲染。

6. 使用原生插件

  • 如果 Uni-app 的高斯模糊效果无法满足需求,可以考虑开发或使用原生插件来实现高斯模糊。例如,使用 Android 的原生 RenderScriptBlurView 库。

7. 测试与兼容性

  • 在不同安卓设备上测试高斯模糊效果,确保兼容性。
  • 如果某些设备无法支持高斯模糊,可以提供降级方案(例如使用半透明背景)。

示例代码

以下是一个简单的 Uni-app 高斯模糊实现示例:

<template>
  <view class="container">
    <image src="/static/background.jpg" class="background" />
    <view class="blur-effect">
      <text>这是一个高斯模糊区域</text>
    </view>
  </view>
</template>

<style>
.container {
  position: relative;
  width: 100%;
  height: 100vh;
}

.background {
  position: absolute;
  width: 100%;
  height: 100%;
  z-index: 1;
}

.blur-effect {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 80%;
  height: 200px;
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  background-color: rgba(255, 255, 255, 0.5);
  z-index: 2;
  display: flex;
  justify-content: center;
  align-items: center;
}
</style>
回到顶部