微信小程序和网站显示灰色方法

2023-11-16

一、小程序设置:

此时大家发现很多网站,app,小程序的整体色调全部变为了灰色,其实并不是所有的图标全部替换了灰色,只是在css中设置了一个属性

只要加上css样式即可

page {
  -webkit-filter: grayscale(.95);
}

全局可以在app.wxss全局的样式文件中设置,若是单个页面调控,可以在单个页面调试

一、网站设置:

和小程序一样,只需增加css样式即可

html { 
    filter: url("data:image/svg+xml;utf8,#grayscale"); 
    -webkit-filter: grayscale(100%); 
    filter: grayscale(100%); 
    filter: gray; 
    filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
}

但是兼容不到ie10和ie11浏览器。需要调用js

/*
 * -- grayscale.js --
 * Copyright (C) James Padolsey (http://james.padolsey.com)
 * Download by http://www.jb51.net
 */

var grayscale = (function(){
    
    var config = {
            colorProps: ['color','backgroundColor','borderBottomColor','borderTopColor','borderLeftColor','borderRightColor','backgroundImage'],
            externalImageHandler : {
                /* Grayscaling externally hosted images does not work
                   - Use these functions to handle those images as you so desire */
                /* Out of convenience these functions are also used for browsers
                   like Chrome that do not support CanvasContext.getImageData */
                init : function(el, src) {
                    if (el.nodeName.toLowerCase() === 'img') {
                        // Is IMG element...
                    } else {
                        // Is background-image element:
                        // Default - remove background images
                        data(el).backgroundImageSRC = src;
                        el.style.backgroundImage = '';
                    }
                },
                reset : function(el) {
                    if (el.nodeName.toLowerCase() === 'img') {
                        // Is IMG element...
                    } else {
                        // Is background-image element:
                        el.style.backgroundImage = 'url(' + (data(el).backgroundImageSRC || '') + ')';
                    }
                }
            }
        },
        log = function(){
            try { window.console.log.apply(console, arguments); }
            catch(e) {};
        },
        isExternal = function(url) {
            // Checks whether URL is external: 'CanvasContext.getImageData'
            // only works if the image is on the current domain.
            return (new RegExp('https?://(?!' + window.location.hostname + ')')).test(url);
        },
        data = (function(){
            
            var cache = [0],
            expando = 'data' + (+new Date());
            
            return function(elem) {
                var cacheIndex = elem[expando],
                    nextCacheIndex = cache.length;
                if(!cacheIndex) {
                    cacheIndex = elem[expando] = nextCacheIndex;
                    cache[cacheIndex] = {};
                }
                return cache[cacheIndex];
            };
            
        })(),
        desatIMG = function(img, prepare, realEl) {
            
            // realEl is only set when img is temp (for BG images)
            
            var canvas = document.createElement('canvas'),
                context = canvas.getContext('2d'),
                height = img.naturalHeight || img.offsetHeight || img.height,
                width = img.naturalWidth || img.offsetWidth || img.width,
                imgData;
                
            canvas.height = height;
            canvas.width = width;
            context.drawImage(img, 0, 0);
            try {
                imgData = context.getImageData(0, 0, width, height);
            } catch(e) {}
            
            if (prepare) {
                desatIMG.preparing = true;
                // Slowly recurse through pixels for prep,
                // :: only occurs on grayscale.prepare()
                var y = 0;
                (function(){
                    
                    if (!desatIMG.preparing) { return; }
                    
                    if (y === height) {
                        // Finished!
                        context.putImageData(imgData, 0, 0, 0, 0, width, height);
                        realEl ? (data(realEl).BGdataURL = canvas.toDataURL())
                               : (data(img).dataURL = canvas.toDataURL())
                    }
                    
                    for (var x = 0; x < width; x++) {
                        var i = (y * width + x) * 4;
                        // Apply Monoschrome level across all channels:
                        imgData.data[i] = imgData.data[i+1] = imgData.data[i+2] =
                        RGBtoGRAYSCALE(imgData.data[i], imgData.data[i+1], imgData.data[i+2]);
                    }
                    
                    y++;
                    setTimeout(arguments.callee, 0);
                    
                })();
                return;
            } else {
                // If desatIMG was called without 'prepare' flag
                // then cancel recursion and proceed with force! (below)
                desatIMG.preparing = false;
            }
            
            for (var y = 0; y < height; y++) {
                for (var x = 0; x < width; x++) {
                    var i = (y * width + x) * 4;
                    // Apply Monoschrome level across all channels:
                    imgData.data[i] = imgData.data[i+1] = imgData.data[i+2] =
                    RGBtoGRAYSCALE(imgData.data[i], imgData.data[i+1], imgData.data[i+2]);
                }
            }
            
            context.putImageData(imgData, 0, 0, 0, 0, width, height);
            return canvas;
        
        },
        getStyle = function(el, prop) {
            var style = document.defaultView && document.defaultView.getComputedStyle ? 
                        document.defaultView.getComputedStyle(el, null)[prop]
                        : el.currentStyle[prop];
            // If format is #FFFFFF: (convert to RGB)
            if (style && /^#[A-F0-9]/i.test(style)) {
                    var hex = style.match(/[A-F0-9]{2}/ig);
                    style = 'rgb(' + parseInt(hex[0], 16) + ','
                                   + parseInt(hex[1], 16) + ','
                                   + parseInt(hex[2], 16) + ')';
            }
            return style;
        },
        RGBtoGRAYSCALE = function(r,g,b) {
            // Returns single monochrome figure:
            return parseInt( (0.2125 * r) + (0.7154 * g) + (0.0721 * b), 10 );
        },
        getAllNodes = function(context) {
            var all = Array.prototype.slice.call(context.getElementsByTagName('*'));
            all.unshift(context);
            return all;
        };
        
    var init = function(context) {
        
        // Handle if a DOM collection is passed instead of a single el:
        if (context && context[0] && context.length && context[0].nodeName) {
            // Is a DOM collection:
            var allContexts = Array.prototype.slice.call(context),
                cIndex = -1, cLen = allContexts.length;
            while (++cIndex<cLen) { init.call(this, allContexts[cIndex]); }
            return;
        }
        
        context = context || document.documentElement;
        
        if (!document.createElement('canvas').getContext) {
            context.style.filter = 'progid:DXImageTransform.Microsoft.BasicImage(grayscale=1)';
            context.style.zoom = 1;
            return;
        }
        
        var all = getAllNodes(context),
            i = -1, len = all.length;
            
        while (++i<len) {
            var cur = all[i];
            
            if (cur.nodeName.toLowerCase() === 'img') {
                var src = cur.getAttribute('src');
                if(!src) { continue; }
                if (isExternal(src)) {
                    config.externalImageHandler.init(cur, src);
                } else {
                    data(cur).realSRC = src;
                    try {
                        // Within try statement just encase there's no support....
                        cur.src = data(cur).dataURL || desatIMG(cur).toDataURL();
                    } catch(e) { config.externalImageHandler.init(cur, src); }
                }
                
            } else {
                for (var pIndex = 0, pLen = config.colorProps.length; pIndex < pLen; pIndex++) {
                    var prop = config.colorProps[pIndex],
                    style = getStyle(cur, prop);
                    if (!style) {continue;}
                    if (cur.style[prop]) {
                        data(cur)[prop] = style;
                    }
                    // RGB color:
                    if (style.substring(0,4) === 'rgb(') {
                        var monoRGB = RGBtoGRAYSCALE.apply(null, style.match(/\d+/g));
                        cur.style[prop] = style = 'rgb(' + monoRGB + ',' + monoRGB + ',' + monoRGB + ')';
                        continue;
                    }
                    // Background Image:
                    if (style.indexOf('url(') >-1) {
                        var urlPatt = /\(['"]?(.+?)['"]?\)/,
                            url = style.match(urlPatt)[1];
                        if (isExternal(url)) {
                            config.externalImageHandler.init(cur, url);
                            data(cur).externalBG = true;
                            continue;
                        }
                        // data(cur).BGdataURL refers to caches URL (from preparation)
                        try {
                            var imgSRC = data(cur).BGdataURL || (function(){
                                    var temp = document.createElement('img');
                                    temp.src = url;
                                    return desatIMG(temp).toDataURL();
                                })();
                            
                            cur.style[prop] = style.replace(urlPatt, function(_, url){
                                return '(' + imgSRC + ')';
                            });
                        } catch(e) { config.externalImageHandler.init(cur, url); }
                    }
                }
            }
        }
        
    };
    
    init.reset = function(context) {
        // Handle if a DOM collection is passed instead of a single el:
        if (context && context[0] && context.length && context[0].nodeName) {
            // Is a DOM collection:
            var allContexts = Array.prototype.slice.call(context),
                cIndex = -1, cLen = allContexts.length;
            while (++cIndex<cLen) { init.reset.call(this, allContexts[cIndex]); }
            return;
        }
        context = context || document.documentElement;
        if (!document.createElement('canvas').getContext) {
            context.style.filter = 'progid:DXImageTransform.Microsoft.BasicImage(grayscale=0)';
            return;
        }
        var all = getAllNodes(context),
            i = -1, len = all.length;
        while (++i<len) {
            var cur = all[i];
            if (cur.nodeName.toLowerCase() === 'img') {
                var src = cur.getAttribute('src');
                if (isExternal(src)) {
                    config.externalImageHandler.reset(cur, src);
                }
                cur.src = data(cur).realSRC || src;
            } else {
                for (var pIndex = 0, pLen = config.colorProps.length; pIndex < pLen; pIndex++) {
                    if (data(cur).externalBG) {
                        config.externalImageHandler.reset(cur);
                    }
                    var prop = config.colorProps[pIndex];
                    cur.style[prop] = data(cur)[prop] || '';
                }
            }
        }
    };
    
    init.prepare = function(context) {
        
        // Handle if a DOM collection is passed instead of a single el:
        if (context && context[0] && context.length && context[0].nodeName) {
            // Is a DOM collection:
            var allContexts = Array.prototype.slice.call(context),
                cIndex = -1, cLen = allContexts.length;
            while (++cIndex<cLen) { init.prepare.call(null, allContexts[cIndex]); }
            return;
        }
        
        // Slowly recurses through all elements
        // so as not to lock up on the user.
        
        context = context || document.documentElement;
        
        if (!document.createElement('canvas').getContext) { return; }
        
        var all = getAllNodes(context),
            i = -1, len = all.length;
        
        while (++i-1) {
                    var urlPatt = /\(['"]?(.+?)['"]?\)/,
                        url = style.match(urlPatt)[1];
                    if (!isExternal(url)) {
                        var temp = document.createElement('img');
                        temp.src = url;
                        desatIMG(temp, true, cur);
                    }
                }
            }
        }
    };
    
    return init;

})();

当我们是ie10和ie11浏览器的时候,调用graystyle的js函数即可。
至此,网站变灰的方案就完美了。完美兼容各种浏览器,笔者已经在生产环境使用过了,大家放心使用。

喜欢的小伙伴赶紧收藏使用起来吧!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信小程序和网站显示灰色方法 的相关文章

  • ckeditor 数据未通过 jQuery 验证进行验证

    我知道有很多关于此的问题 但我无法让它在我的一生中发挥作用 我尝试了几种解决方案 包括this http devlog waltercruz com usando ckeditor e jquery validate juntos 第二个答
  • Cocoa webview UserAgent“webkit-legacy”问题

    我解决了这个问题 请看下面所选的答案 我一直在努力寻找导致 OSX Cocoa 应用程序的 WebView 与 Safari 表现不同的原因 事实证明 用户代理是不同的 有点明显 并且我正在访问的网站不知道如何处理它 令人惊讶的是 它是ht
  • Django base.html扩展为homepage.html,出现静态图像,但home.css不起作用

    Problem 正如标题所示 我正在构建一个 django 项目 base html 扩展为 homepage html 并且工作正常 出现静态图像 但 home css 在任何地方都不起作用 Update 我已经切换了base html
  • JavaScript;使用画布在图像上添加文本并保存到图像

    我只想制作一个页面 您可以在其中输入文本并将其添加到所选图像上并将其另存为新图像 我尝试了几种方法 但没有运气
  • React Native Tab 视图的高度始终等于最高选项卡的高度

    介绍 我有一个 FlatList 它在页脚中呈现一个选项卡视图 此选项卡视图允许用户在一个 FlatList 或另一个 FlatList 之间切换 所以 最后这些是同级 FlatList Problem 第一个 FlatList A 的高度
  • jquery菜单栏浮动顶部

    我试图使菜单栏不断浮动在浏览器的顶部 因此当他们向下滚动页面时 菜单栏仍位于顶部 我该怎么做呢 Regards CSS 标签position fixed 即使滚动 也会使其保持在屏幕上的同一位置 使用它 然后将其定位为top right b
  • 如何使用 selenium webdriver 单击 div 按钮?

    我有这个按钮 div class dsk col 1 4 card new div class div center div span class icon icon plus black symbol span h2 Create h2
  • 如何在使用“document.createElement()”方法创建单元格后立即在 JavaScript 中设置单元格宽度?

    我已经使用 document createElement td 方法在 html 页面中为动态表格创建了单元格 现在希望用一些不同的值设置每个单元格的宽度 尝试过 cell width width 但它不起作用 我怎样才能实现它 Use s
  • rvest - 在 1 个标签中抓取 2 个类

    我是新来的 如何提取标签中具有 2 个类名或仅 1 个类名的元素 这是我的代码和问题 doc lt paste span class a1 b1 text1 span span class b1 text2 span library rve
  • 基于多个类选择元素

    我有一个样式规则 我想在标签具有two类 有没有办法不用 JavaScript 来执行此操作 换句话说 li class left ui class selector 我想应用我的风格规则only if the li两者都有 left an
  • 为什么边框会增加元素的宽度?

    我有一个div如下 其指定宽度为 300px 边框宽度为 2px 为什么2px边框会导致宽度div是304px 如果我希望它有边框但宽度仍为 300 像素怎么办 test width 300px height auto border 2px
  • 从 onclick 属性调用 e.stopImmediatePropagation()

    如何从事件对象中获取事件对象onclick属性 我努力了 a href something html Click me a 另外 我也尝试过这个 a href something html Click me a 但控制台只显示 a 元素 我
  • Bootstrap 居中 div 内的文本左对齐

    我有一段 4 行诗 位于居中的 div 中 因为它是诗歌 所以我需要将 4 行左对齐 但不要对齐到 div 的左侧 这是它的居中方式 Lorem ipsum dolor sit amet onsectetur adipisicin Dolo
  • 淡出图像上的文字

    我知道如何使用 CSS 透明渐变淡出纯色背景上的文本 但是如何才能淡出图像背景上的文本呢 这是我想要的一个例子 注意 我需要像图像一样的静态效果 而不是动态过渡 CSS mask image可能是您正在寻找的 div background
  • 单击按钮滚动到特定 div

    我有一个具有固定菜单和内容框 div 的页面 单击菜单时 内容框滚动到特定 div 到目前为止 一切都很好 这是这里的示例 https jsfiddle net ezrinn 8cdjsmb9 11 https jsfiddle net e
  • Python Flask 不更新图像[重复]

    这个问题在这里已经有答案了 这里有一些关于图像的 Flask 问题 但没有一个能解决我的问题 我有一个应用程序可以创建图像 保存它 然后显示它 一次 它应该多次执行此操作 每次更改图像时 它应该加载新图像 它不是 它只显示与其显示的文件名关
  • 如何检索 JQuery 数据表的排序状态

    我对 JQuery Datatables 还很陌生 我正在尝试检索有关数据表的两个信息 当前正在对哪个列索引进行排序 也称为选择 排序顺序 升序或降序 不知道我应该如何解决这个问题 使用 jquery 查找列索引 或者 Datatables
  • 有两个切边的矩形

    我不确定这个形状的具体名称是什么 但我可以将其称为 半平行四边形 吗 我想纯粹使用这个形状CSS CSS3 有什么帮助吗 或教程 您可以使用伪元素来完成此操作 如下所示 做法是从盒子的左下角和右上角剪出一个三角形 只要主体背景是纯色 此方法
  • Shiny 中的模态对话框:可以调整宽度但不能调整高度

    在我的 Shiny 应用程序中 我有几个来自闪亮BS 包的模式窗口 我可以像这样调整这些模式窗口的宽度 tags head tags style HTML modal lg width 1200px abs 1 background col
  • 当页面加载图像时,它是只加载一次,还是每次在标记中找到它时加载?

    当页面加载图像时 它是只加载一次 还是每次在标记中找到它时加载 那么 jquery 呢 附加一个 img 会导致它再次重新加载吗 我问这个问题是因为我有高分辨率图像 但需要在标记的许多情况下使用它 img src hello jpg img

随机推荐

  • 弹性盒子(display: flex)布局超全讲解

    文章目录 什么是弹性布局 弹性布局的特点 容器的属性 justify content align items flex direction flex wrap flex flow align content order属性 flex gro
  • QT笔记-Label控件显示图片

    1 Label控件动态显示图片 动态显示图片1 int DeviceEdit OnLensPic bool checked AfCd cd QImage img img load UI lens bmp QImage imgScaled i
  • EduCoder_web实训作业--页面结点元素

    第一关 B C D A B 第二关 section section
  • LeetCode从零开始——第一题

    1 两数之和 题目描述 解题思路 代码执行 题目描述 给定一个整数数组 nums 和一个目标值 target 请你在该数组中找出和为目标值的那 两个 整数 并返回他们的数组下标 你可以假设每种输入只会对应一个答案 但是 数组中同一个元素不能
  • WPF图表Live Charts(四)动态折线图

    简介 前面介绍了Live Charts的基础和设置 接下将介绍如何绘制动态的折线图 实时更新数据的折线图 效果预览 前台代码
  • 容器常用函数、algorithm头文件

    偶然发现有个
  • C++ 大话设计之《代理模式》(优缺点,设计原理,常用场景)

    代理模式是一种结构型模式 优点 可以实现对原对象的访问控制 代理对象可以在访问原对象之前执行一些额外操作 例如检查权限 记录日志等 可以提供额外的功能 代理对象可以在不修改原对象的情况下 为原对象提供额外的功能 可以减少客户端代码的复杂性
  • 【QT基础入门】1、QT开发环境搭建

    文章目录 一 学习所需要的软件 二 安装 VS2012 三 win10 下安装 QT 一 学习所需要的软件 Visual Studio 2012 Qt SDK 4 7 4 Qt Creator 2 4 1 Visutal Studio 20
  • 2021-10-26尤破金10.27外汇黄金白银实时操作策略布局

    黄金行情走势分析 周二 10月26日 国际金价回落 受到美元上扬打压 投资者在本周的关键央行政策会议前评估各国央行对日益增长的通胀压力可能做出的反应 分析师说 在当前的通胀环境下 黄金应能维持相对良好的支撑 直到我们得到美联储明确的鹰派转向
  • 2017总结

    这一年还是大部分时间做着开发的工作 在创业的一年多时间里 好像自己所做的事情不太像一个创业者做的事 用了太多的时间在具体的工作当中了 对于市场 对于营销推广都是在被动的接收 没有全面的 主动的去做事情 这也可能是我们做技术的出来创业的弊端
  • Vue.js 中hash路由和history路由原理及优缺点

    Vue js 中hash路由和history路由原理及优缺点 hash模式 原理 在 url 中的 之后对应的是 hash 值 其原理是通过hashChange 事件监听hash值的变化 根据路由表对应的hash值来判断加载对应的路由加载对
  • python基础----02-----字面量、变量、数据类型及其转换、标识符以及字符串、数据输入(input语句)

    一 字面量 1 字面量 字面量 在代码中 被写下来的的固定的值称之为字面量 类似C C 的字符串常量 1 1 常见的python值类型 Python中常见的值类型 实际上在C C 字面量和这里的类型还是有区别的 体现在内存存储中 字面量存储
  • 批处理命令将文件合并成一个pdf_如何在 Linux 命令行操作 PDF

    pdftk 命令提供了许多处理 PDF 的命令行操作 包括合并页面 加密文件 添加水印 压缩文件 甚至还有修复 PDF Sandra Henry stocker 作者 虽然 PDF 通常被认为是相当稳定的文件 但在 Linux 和其他系统上
  • linux修改用户名

    1 开root sudo passwd 2 修改sudoer 防止过程中用户权限不够 命令 gedit etc sudoer root ALL ALL ALL ALL 下添加 xxx ALL ALL ALL ALL 3 修改shadow g
  • 数论整理之唯一质因子分解方程

    唯一质因子分解方程 每个大于1的自然数均可写为质数的积 而且这些素因子按大小排列之后 写法仅有一种方式 标称 include
  • Qt getSaveFileName Qt date 获取显示当前时间和日期 文件

    保存文件 getSaveFileName QString strSaveName QFileDialog getSaveFileName this tr 保存的文件 tr demo a txt
  • C# SolidWorks 二次开发 API --- 实例:随机上色

    随机上色这个功能做起来不算复杂 但是要想做的比较完美也不简单 这一篇文章我就只做随机给装配体中的零件上色 上色前 上色后 简单的代码 private void btn setcolor Click object sender EventAr
  • FFMPEG推流摄像头

    一般的直播网站都使用OBS推流 其实ffmpeg也可以推流 在无界面环境下就可以推流使用 本文以Windows下为例 简单介绍下使用ffmpeg工具推流的方法和步骤 下载安装 下载地址 https ffmpeg zeranoe com bu
  • 使用源码安装的方式安装杀毒软件Clamav

    使用源码安装的方式安装杀毒软件Clamav 安装过程要解决的依赖有一个 libcurl 下载clamav源码包 wget http www clamav net downloads production clamav 0 102 3 tar
  • 微信小程序和网站显示灰色方法

    一 小程序设置 此时大家发现很多网站 app 小程序的整体色调全部变为了灰色 其实并不是所有的图标全部替换了灰色 只是在css中设置了一个属性 只要加上css样式即可 page webkit filter grayscale 95 全局可以