私は最近、Vue の小規模なモバイル デモに数か月間取り組んできました。そのうちの 1 つは、各ページの統合スキニング機能を実装しています。この記事では主に Vue をベースにしたスキン変更機能のサンプルコードを紹介しますが、編集者が非常に良いと思ったので参考にさせていただきます。編集者をフォローして見てみましょう。
最初に実装を見てみましょう
テーマカラーを設定します
合理的に言うと、段階的に実装できるいくつかのポイントがあると思います:
1.カラー値
2. scss のニッチな用途 (多変数 CSS 値の一括設定)
3. グローバル イベント バスの応用
1 カラー値の選択と原則
を読むことをお勧めしますAnt Financial のデザイン ガイドラインには、一般的なインタラクションとインターフェイスのデザインに関する優れたガイドラインと提案が含まれています。読書が好きな人は、「Design Book forEveryone」を読むこともできます。
インターフェースのカラー要素については、通常、視覚的な連続性、つまり同じ色のセットを維持する必要があり、同じカラーサークル上のカラー値を使用するようにしてください
カラー値同じリングに色のセットを付けると、よりコーディネートに見えます
そこで、ここではアリデザインの提案を採用し、特定の色の値の列をシリーズのテーマカラーとして使用します(公式を参照してください)特定の色の値については Web サイトを参照してください~)
そして、いくつかの特別な機会では、コイントスページの 2 つの色のような色の違いを表現する必要があります。
2 は形式の色の値を変換します16 進数のカラー値に変換します
ここでは、テーマカラーの透明度を設定することでさまざまな色を区別します。次に、#123456 などの 16 進数のカラーグローバル変数をテーマとして保存します。ここでは、カラー値をそのような形式に変換する必要があります。 rgba で表される色の値に変換するコードは次のとおりです
hexToRgba (hex, opacity = 0.3) { let color = [] let rgb = [] hex = hex.replace(/#/, '') for (let i = 0; i < 3; i++) { color[i] = '0x' + hex.substr(i * 2, 2) rgb.push(parseInt(Number(color[i]))) } return `rgba(${rgb.join(',')},${opacity})` }
3 scss のニッチな用途
ようやく欲しかったテーマカラーのリストが得られました
コードをコピーしますコードは次のとおりです:
$colors: #f04134, #00a854, #108ee9, #f5317f , #f56a00, #7265e6, #ffbf00, #00a2ae, #2e3238;
非常に直接的なアイデアです。各ビュー ページでテーマを設定するために必要な要素の色 (テキストやアイコンの色、頭の背景など) を定義します。 そこで、アプリ内でカラー変数を定義し、それを各ビュー コンポーネントに配布し、このグローバル変数を使用してすべてのルーティング ページのカラーを制御し、さまざまなテーマ効果を実現します。
ディスパッチの実装については次のセクションで説明します。ここで最初のステップを簡単に抽出できます:
4 グローバル カラーを設定して保存します
インターフェイスに関する簡単な説明:
この機能をホームページに直接実装しました。このプロジェクトでは、mint-ui フレームワーク (Ele.me チームのモバイル フレームワーク。残念ながら、element.ui ほど使いやすくはありません) を導入しました。インタラクションのセットアップは、弾性レイヤー mt-popup の形式で行われます。次に、カラー ブロックを直接クリックして、対応するカラー値を設定します
<!-- 設置顏色 --> <mt-popup v-model="changColor" position="bottom" class="color-panel"> <p class="color-items"> <span class="color-item" v-for="(item, $index) in colors" :key="$index" @click="chooseColor(item)"> <span class="color-cycle" :class="'bg-color' + ($index + 1)"></span> </span> </p> </mt-popup>
。すると、上記のコードからカラー ブロック p が表示されます。このようなCSSスタイルシートを簡単に見ることができます
.bg-color1 {background: #f04134} .bg-color2 {background: #f04134} .bg-color3 {background: #f04134} .bg-color4 {background: #f04134} ···
Write コーディングをしているときに、似たようなことが繰り返し現れると、私たちは常に漠然と「そろそろ実行する時期だ」と感じます。プロジェクトが成長すると、color1、borderColor1 など、単一設定のフォントの色や境界線の色のスタイル シートが多数存在する可能性があります。このように、テーマ カラーの配列に従ってそれぞれの表現形式を記述する必要があります。改造費用も高額になります。私の書き方はこんな感じです
// mixin.scss: $colors: #f04134, #00a854, #108ee9, #f5317f, #f56a00, #7265e6, #ffbf00, #00a2ae, #2e3238; // setColor.vue: @import '~@/assets/mixin.scss'; ··· @for $i from 1 to 10 { .bg-color#{$i} { background-color: nth($colors, $i) } }
scss よく使われるクラス名の入れ子の書き方に加えて、繰り返し書く必要があるこの種のスタイルには、控えめで贅沢な構文もたくさんあります。 , 私の同意 繰り返しループスタイルを書く必要がある場合、ミックスインファイルにscss変数を追加し、それを変数として導入することです。スタイルを書くときに、sassループを使用して、対応する値を参照します。カラー設定スタイルがどのように展開され、変化しても、それが色付きの背景であっても、境界線であっても、同じ方法をミックスイン ファイルに適用するだけで済みます。要するに、プロジェクト内のフォント サイズと間隔の値を統一するということです。Bar
5 小さなロジックを試してみましょう。 这个项目里面localstorage 基本被当成数据库使用了,所以点击色块设置主题时候,我们假装发出请求,在localstorage存储我们改变的颜色就好了( ./static/api.json 是一个返回helloword 的json, 为了写实在这里这么用,$bus 事件巴士下面说, 作用就是设置全局的主题颜色变量,localStorage 模拟我们把设置存储到后台,每次重新打开页面就去获取这些设置值), 目前为止,我们的设置页面就大致完成了 6 事件巴士的运用 在上一步最后我们有个关键的东西没完成, this.$bus.$emit('set-theme', color) ,将选取的颜色设置到全局,我的代码结构是这样的 子组件 我们可以很直接地用绑定事件配合 emit() 的做法,在 app.vue 定义一个 setglobalColor 方法, 并绑定到router-view(包含了home.vue),接着在home组件继续定义一个 setglobalColor 方法, 实现的功能就是 emit('setglobalColor') 去触发app.vue的方法, 并把 home.vue 的这个 setglobalColor 继续绑定到组件, 组件里面点选颜色时候,直接emit这个方法就行了。 为什么我想用事件巴士.vue 的事件巴士和 vuex, 在一些有追求的程序员手里总是小心翼翼的,我也一样,因为作为涉及全局的东西,一般觉得能不用就不用,代码能精简就精简,我们经常用一个词,不提倡。 可是有朝一日我经常在想,代码的可读性可维护性,和性能以及“风险”相对比,到底哪个更重要。对于事件巴士和vuex 这类全局性质的方案的主要担忧大部分在于, 他们是全局的,可能因为一个事件名变量名一致就造成冲突,在小型项目还会造成冗余和额外开销。 但事实上,事件和变量的命名我们都可以通过约定去规范,而在表现上,使用了事件巴士和vuex的项目,在性能上和直接 props 传递数据,emit 回调事件的项目相比,其实并没有太大区别,反而是无止境的 props 和 emit ,给人一种麻烦难以维护的感觉。 像上述的 setglobalColor , 仅仅是跨越了两层组件, 过程就显得繁琐了。所以我建议在出现两级以上组件层次,数据流稍微多的项目中都可以这么去做,定义一个全局的事件巴士 将事件巴士绑定到当前vue对象,使用时候只需要: 在这个demo中,我在app.vue 绑定了 而在 setColor.vue 则在点击颜色块时候触发 this.$bus.$emit('set-theme', color), 则能实现我们设置全局颜色的效果。这样的好处在于,对于跨了多个层次,或者兄弟组件的通信,我们不再需要太繁琐的props,比如我在header.vue 也绑定了 this.$bus.$on('set-theme', (color) => { }) ,在 this.$bus.$emit 发生时候,header 的背景颜色就能直接改变,而不需要等待app.vue 将 全局的color值props传递到header.vue里面(仅做示例,这里 header.vue 只是 app.vue 的下一层级,通过props数据流会更清晰) 而对于其他路由页面组件,和 app.vue 都是直接上下级关系,我们依然采用props保持一个清晰的数据流向下传递, demo 里我是将 color 存在userinfo(以后还有其他数据), userinfo传到每个子路由, 最后,每个页面在创建时候,通过拿到这个全局的颜色,再用dom去更改对应的样式就好啦,例如 详细的实现请参照项目代码,这里我只挑一些比较清奇的点出来讨论,项目和代码的一些规范和习惯还是挺重要的,希望有好的实践能互相借鉴进步~ 相关推荐: jQuery结合jQuery.cookie.js插件实现换肤功能示例// 假装调用接口设置颜色
chooseColor (color) {
this.$axios.get('./static/api.json')
.then((data) => {
this.$bus.$emit('set-theme', color)
this.changColor = false
localStorage.setItem('themeColor', color)
})
.catch((data) => {
console.log(data)
})
}
export default (Vue) => {
let eventHub = new Vue()
Vue.prototype.$bus = {
$on (...arg) {
eventHub.$on(...arg)
},
$off (...arg) {
eventHub.$off(...arg)
},
$emit (...arg) {
eventHub.$emit(...arg)
}
}
}
this.$bus.$on('set-theme', (color) => {··· })
this.$bus.$emit('set-theme', '#000000')
this.$bus.$on('set-theme', (color) => {
this.loadingColor = color
this.userinfo.color = color
})
mounted () {
this.$nextTick(() => {
// 绑定设置主题的事件,一旦触发修改主题,则将当前字体颜色改为对应颜色
this.$el.querySelector('.myTitle').style.color = this.userinfo.color
this.$el.querySelector('.weui-btn_primary').style.backgroundColor = this.userinfo.color
this.$el.querySelector('.add_icon').style.color = this.userinfo.color
})
}
以上がVueスキン変更機能サンプルチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

WebStorm Mac版
便利なJavaScript開発ツール
