hybird之web动态换肤实现

简介:

前言

最近在重构个hybird(原生的壳包着Web页面)的UI框架,进行到了做换肤功能的阶段,所以这里是我思考的解决的方法。

预想

目前实现换肤的功能无非就两种做法。

1.写几个皮肤文件,然后切换使用这几个文件达到换肤的目的。

不得不说这是最常见的方式,效果也比较明显,但是它有几个缺点。

缺点:

1.如果更改一个皮肤的内容,那其他的皮肤文件也要做相应修改(这挺麻烦,不过可以用less管理css解决,所以也不是什么大问题)。

2.它是固定的,在使用的时候皮肤文件已经是写好的了,而当我需要动态设置一些属性的时候就无可奈何了。

2.使用less这种工具,在页面加载时才动态生成皮肤样式。

但这种方式的缺点却很明显。

缺点:

1.效率低,为了一个换肤的功能,却要引一个less工具(压缩后大概126KB),在终端Web是无法忍受的。

2.速度慢,因为有一个皮肤文件编译(姑且把它叫做编译)生成的过程,在终端也难以接受(有可能还出现页面皮肤闪),如果更换皮肤又要重新编译。

考虑

鉴于上面两种方法的缺点,一种无法动态,另一种效率低。

所以上面两种方法没办法使用,只能思考另外的方法了,于是就分析哪些是hybird 页面需要换肤的元素

有几个需要换肤的元素:

1.导航栏

2.底部栏

3.默认图标

而又寻找需要设置的属性:

1.背景色

2.字体颜色

3....(主要是这两个)

根据上面的两个东西,我发现没必要把页面换肤想成那么复杂一件事,不是需要用什么工具或切换css文件。是不是可以获取需要动态设置的属性,然后然后设置到需要换肤的元素就可以了(就是这个简单想法)。

PS:有人会说皮肤怎么会需要动态生成。我只能说有可能某些皮肤属性是页面启动时才知道,又或者支持自定义皮肤的。

实现

说干就干,实现起来代码很少,就直接贴出来给大家看看。

复制代码
ui.Skin = (function(){

     var skinTagId = "BINGOTOUCH-SKIN", TEMPLATE = {
          BGCOLOR : "@selector { background-color : @BGCOLOR !important; }",
          COLOR : "@selector { color : @COLOR !important; }"
     }    

     var init = function (options){
         var settings = {
              changeColorSelector : [ ".header", ".footer"],
              color : "#FFFFFF",
              changeBgColorSelector : [ ".header", ".footer"],
              bgColor : "#278cca",
              appendElement : "head"
          }

          $.extend(settings,options);
          $("#" + skinTagId).remove();
          
          var html = "<style id='" + skinTagId + "'>";
              html += _createCss(settings.changeColorSelector, "COLOR", settings.color);
              html += _createCss(settings.changeBgColorSelector, "BGCOLOR", settings.bgColor);
              html += "<style>";
          $(settings.appendElement).append(html);
     }

     var _createCss = function(changeSelectors, colorType, color){
         var html = "";
           $.each(changeSelectors ,function(i, selector) {  
             html += TEMPLATE[colorType].replace("@selector", selector).replace("@" + colorType, color);
        });        
           return html;
     }

     return { 
         init : init
     }

})();
复制代码

代码很简单,看看就明白

总结

我的实现方法很简单,当然所能更换的内容也较少且固定,但这对hybird应用的换肤已经是够的了。既能动态换肤,而且效率是不错的。

——技术只是技术,工具只是工具,不能为用而用。



本文转自 海角在眼前 博客园博客,原文链接:http://www.cnblogs.com/lovesong/p/4122262.html   ,如需转载请自行联系原作者

相关文章
|
前端开发 JavaScript API
探索现代Web开发中的动态数据交互——前端与后端整合实战
本文探讨了现代Web开发中前端与后端整合的关键技术点,通过实际案例演示了如何利用JavaScript和Node.js实现动态数据交互,全面解析从数据请求到响应的全过程。
627 18
|
搜索推荐 UED Python
动态多条件查询:理解`filter_by`与`filter`提升Web应用搜索功能
通过深入理解filter_by与filter的异同,并结合使用它们,我们可以构建一个既灵活又强大的动态多条件查询系统。这不仅提升了Web应用的搜索功能,也为用户提供了更加个性化的搜索体验。希望本文能够启发你在自己项目中实现类似的功能,以满足用户多变的搜索需求。
|
搜索推荐 UED Python
动态多条件查询:理解`filter_by`与`filter`提升Web应用搜索功能
了解SQLAlchemy中`filter_by`与`filter`对提升Web应用搜索功能至关重要。`filter_by`简化了等值查询,而`filter`则支持复杂的表达式和逻辑组合。通过动态获取用户输入,构建基础查询并根据条件应用过滤,可以创建灵活的搜索系统。结合分页和排序,为用户提供定制化搜索体验。掌握这两者,能增强应用的交互性和实用性。
374 0
动态多条件查询:理解`filter_by`与`filter`提升Web应用搜索功能
|
JavaScript Docker 容器
vue打Docker镜像动态获取IP-nginx做的web服务
vue打Docker镜像动态获取IP-nginx做的web服务
130 0
|
Python
169 python网络编程 - Web动态服务器
169 python网络编程 - Web动态服务器
167 0
|
Java BI 项目管理
JSP动态测评系统myeclipse开发计算机程序web结构java编程
JSP 量化分级测评系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。
138 0
|
存储 网络架构 Python
python|web应用框架|增加动态路由
python|web应用框架|增加动态路由
269 0
python|web应用框架|增加动态路由
|
缓存 JavaScript 前端开发
列表渲染(List Rendering):构建动态Web应用的关键技术
在现代Web应用开发中,动态显示数据是至关重要的,而列表渲染是实现这一目标的关键技术之一。它允许开发者有效地渲染和管理动态生成的列表,如新闻文章、产品列表、评论等。在本博客中,我们将深入探讨列表渲染的概念、不同的列表渲染方法、性能优化以及如何利用列表渲染来构建具有动态性和响应性的Web应用。
358 0
|
前端开发 JavaScript 开发者
条件渲染(Conditional Rendering):构建动态Web界面的关键技术
在Web应用程序开发中,动态性和交互性是吸引用户的关键因素之一。条件渲染是一种重要的技术,它允许开发者根据特定条件来选择性地显示或隐藏页面元素,以实现动态Web界面。在本博客中,我们将深入探讨条件渲染的概念、不同的条件渲染方法、最佳实践以及如何有效地使用条件渲染来构建具有响应性和交互性的Web应用。
421 0
|
Java 应用服务中间件 容器
IDEA创建普通动态Web模块(图文教程)2
IDEA创建普通动态Web模块(图文教程)2
148 0

热门文章

最新文章