言
這是我的第一個基于Vue項目的作品,目的是把之前的前端知識累積加上目前流行的前端框架,以項目的形式展示出來。 大家在學習Vue的時候,可以將此項目作為學習Vue框架的一個模板
效果圖
這個最后做出來的效果圖
實現功能
使用的技術棧
vue2.0 + vue-router + vue-cli + axios + stylus + flex布局 + es6 + eslint + webpack2 復制代碼
項目目錄
項目結構
common文件夾存放的是通用的css和fonts componets文件夾用來存放Vue組件 router文件夾存放Vue組件 build文件是webpack的打包編譯配置文件 config文件夾存放的是一些配置項,比如我們服務器訪問的端口配置等 dist該文件一開始是不存放,在項目經過build之后才會生成 Prod.server.js該文件是測試模擬的服務器配置,用來運行dist里面的文件 config/index.js中,build對象中添加一條端口設置port:9000 App.vue根組件,所有的子組件都將在這里被引用 Index.html整個項目的入口文件,將會引用我們的根組件App.vue Main.js入口文件的js邏輯,在webpack打包之后將被注入到index.html 復制代碼
搭建Vue的運行環境
1,首先是安裝node
端開發框架和環境都是需要Node.js,先安裝node.js開發環境,vue的運行是依賴于node的npm的管理工具來實現的,下載地址(nodejs.org/en/)
2,查看node的版本號
下載好node之后,打開cmd管理工具,輸入node -v,回車,查看node版本號,出現版本號則說明安裝成功
node -v 復制代碼
3,安裝淘寶npm鏡像
由于npm是國外的,使用起來比較慢,這里使用淘寶cnpm鏡像來安裝vue,淘寶的cnpm命令管理工具可以代替默認的npm管理工具
$ npm install -g cnpm --registry=https://registry.npm.taobao.org 復制代碼
4,安裝全局vue-cli腳手架
淘寶鏡像安裝之后,我們就可以全局vue-cli腳手架,輸入命令:cnpm install -g vue-cli回車;驗證是否安裝成功,在命令輸入vue,出來vue的信息,及說明安裝成功
cnpm install -g vue-cli 復制代碼
5,初始化項目
Vue init webpack demo 復制代碼
(demo指的是你新建的項目名稱/文件名稱)
6,運行項目
npm run dev 復制代碼
然后就會出來http://localhost:8080 把這個網址復制到瀏覽器中打開
7,發布代碼
npm run build 復制代碼
發布完代碼后會生成dist目錄,保存著項目的所有可運行的代碼
開發過程中重點問題總結
better-scroll
Better-scroll可能是目前最好用的移動端滾動插件 插件在移動端使用時需要設置 click:true,否則移動端滑動無效
分開設置css樣式
1,圖標icon.css--文字圖標樣式,通過icomoon.io網站,將svg圖片轉成文字圖標樣式
2,公共base.css--處理設備像素比的一些樣式,針對border-1px問題,不同設備像素比,顯示的線條粗細不同
3,工具mixin.css--設備border-1px樣式和背景樣式
sticky-footer布局
在這個項目的header組件的詳情頁采用stick-footer布局
特點:如果頁面內容不夠長,頁腳塊粘貼在視窗底部; 如果內容足夠長,頁腳塊會被內容向下推送
實現:父級 position:fixed,內容設為padding-bottom:64px,頁腳相對定位,margin-top:-64px,clear:both為了保證兼容性,父級要清除浮動
要求自適應布局
1,左側寬度固定,右側寬度自適應
左側固定width:80px,右側自適應
parent: display:fiexd; child-left: flex:0 0 80px child-right: flex:1 復制代碼
2,元素寬度自適應設備寬度,且元素要求等寬高樣式
商品詳情頁面的商品圖片展示樣式
.img_header { position:relative width:100% // width是 設備寬度 height:0 padding-top:100% // 高度設為0,使用padding撐開 .img { position:absolute //定位布局 top:0 left:0 width:100% height:100% } } 復制代碼
背景模糊效果
filter:blur(10px)
注意,所有在內的子元素也會模糊,包括文字,所以采用定位布局,背景單獨占用一個層,ios有一個設置backdrop-filter:blur(10px),只會模糊背景,但不支持android
transition過渡
在購買控件中使用transition過渡效果,實現添加減少按鈕的動效,和小球飛入購物車的動效(模仿貝塞爾曲線的效果)
name-String用于自動生成css過渡類名
name: 'fade' 將自動拓展為.fade-enter,.fade-enter-active等。默認類名為 "v"
fade-enter fade-enter-active fade-leave fade-leave-active 復制代碼
seller組件
問題一:seller頁面中商品商家實景圖片橫向滾動
解決方案:每個 li 要 display:inline-block,因為width不會自動撐開父級ul,所以需要將計算后的寬度賦值給ul的width,(每一張圖片的width+margin)*圖片數量-一個margin,因為最后一張圖片沒有margin
同時new BScroll里面要設置scrollX: true,eventPassthrough: 'vertical', // 滾動方向橫向
問題二:打開seller頁面,無法滾動
問題分析:出現這種現象是因為better-scroll插件是嚴格基于DOM的,數據是采用異步傳輸的,頁面剛打開,DOM并沒有被渲染,所以,要確保DOM渲染了,才能使用 better-scroll,
解決方案:用到mounted鉤子函數,同時必須搭配this.$nextTick()
問題三:在seller頁面,刷新后,無法滾動問題分析:出現這種情況是因為mounted函數在整個生命周期中只會只行一次
解決方案:使用watch方法監控數據變化,并執行滾動函數 this._initScroll();this._initPicScroll();
緩存數據
//將頁面信息保存到localStorage里 export function saveToLocal(id, key, value) { let seller=window.localStorage.__seller__;//新定義一個key值_store_,存放要保存的數據對象 if (!seller) { // 不存在Seller seller={}; seller[id]={}; } else { seller=JSON.parse(seller);//string格式-->json格式 if (!seller[id]) { seller[id]={}; } } seller[id][key]=value; window.localStorage.__seller__=JSON.stringify(seller);//將json格式轉成String格式,存放到window.localStorage._store中 }; //將localStorage信息設置到頁面中 export function loadFromLocal(id, key, def) { let seller=window.localStorage.__seller__; if (!seller) {//開始是沒有的,因為沒有點擊事件,所以顯示默認數據 return def; } seller=JSON.parse(seller)[id];//將json格式-->String格式 if (!seller) { return def; } let ret=seller[key]; return ret || def; }; 復制代碼
goods,ratings,seller組件之間切換時會重新渲染
在 app.vue 內使用 keep-alive,保留各組件狀態,避免重新渲染
<keep-alive> <router-view :seller="seller"></router-view> </keep-alive> 復制代碼
vue-router
使用<router-link>組件完成導航,<router-link> 默認會被渲染成一個 <a> 標簽,但必須使用 to屬性,指定連接 復制代碼 // app.vue <!-- 導航 --> <router-link to="/home">home</router-link> <router-link to="/about">about</router-link> <!-- 路由出口 組件渲染容器 --> <router-view></router-view> 復制代碼 // router: index.js import Vue from 'vue'; import Router from 'vue-router'; import goods from 'components/goods/goods.vue'; import ratings from 'components/ratings/ratings.vue'; import seller from 'components/seller/seller.vue'; Vue.use(Router); const routes=[{ path: '/', redirect: '/goods' }, { path: '/goods', component: goods }, { path: '/ratings', component: ratings }, { path: '/seller', component: seller }]; 復制代碼
axios
在vue1.x的時候,vue的官方推薦HTTP請求工具是vue-resource,但是在vue2.0的時候將推薦工具改成了axios
組件間通訊
vue是組件式開發,所以組件間通訊是必不可少的
event bus: 利用一個中間組件來作為信息傳遞中介 vuex: 信息樹 復制代碼
父傳子: props
子組件定義 props 來接受父組件傳遞來的數據對象
// 父組件 <v-header :seller="seller"></v-header> // 子組件 header.vue props: { seller: { type: Object } } 復制代碼
子傳父: $emit
如果是子組件想傳遞數據給父組件,需要派發自定義事件,使用 $emit 派發
父組件使用v-on接收監控(v-on可以簡寫成@)
// 子組件 ratingSelect.vue,派發自定義事件select,將type數據傳給父級 this.$emit('select', type); this.$emit('toggle', this.onlyContent2); // 父組件 food.vue 在子組件的模板標簽里,使用v-on監控toggleContent傳過來的數據 <ratingselect @select="selectRating" @toggle="toggleContent"></ratingselect> 復制代碼
非父子組件之間通信
1,大型項目可以用 Vue官方推薦的vuex
2,EventBus
3,子組件A $emit 派發具體事件,由父組件 @ 監聽得到數據
父組件再利用 $refs 直接訪問子組件B的方法,間接實現數據從子組件A傳遞至子組件B
組件提取管理
將相同樣式或功能的區塊單獨提出來,作為一個組件。 另外組件中用到的圖片等資源就近維護,即可以考慮在組件文件夾中新建images文件夾。
抽離組件遵循原則: 要盡量遵循單一職責原則,復用性更高,不要設置額外的margin等影響布局的東西
打開app應用,默認顯示 goods 頁面內容
想默認顯示goods頁面內容,有兩種方法,一種是利用重定向,另一種是利用vue-router的導航式編程
1,重定向
routes: [ { path: '/', redirect: '/goods' //重定向 }, { path: '/goods', name: 'goods', component: goods },{ path: '/ratings', name: 'ratings', component: ratings },{ path: '/seller', name: 'seller', component: seller } ] 復制代碼
2,導航式編程
router.push('/Goods'); 復制代碼
關于ESlint
eslint 是一個js代碼風格檢查器,配合vue-cli腳手架中的熱更新,可以很方便的定位和提示錯誤。在公司多人協作開發時可以確保代碼風格保持一致,可以很方便的閱讀他人的代碼
手機訪問項目
1、在config文件夾中的index.js中的host選項,將本地localhost改為0.0.0.0
2、在cmd中輸入ipconfig查看本地IP,
3、在瀏覽器中輸入IP地址
4、端口號訪問(http://192.168.0.110:8080),將這個網址復制到網頁版“草料二維碼”中,用QQ掃碼訪問即可
七篇寫民生銀行,作為房產圈最受歡迎的銀行,授信額度和房產估值成正比。像極了北上廣深的丈母娘,你痛恨她逼你買房,三五年后你會感謝她逼你買房。
一、銀行特征
各家銀行會對授信客戶進行用戶畫像分析,各家銀行信用卡審批、營銷、風控不同,在持卡人眼里也有著獨特的銀行特征。
民生銀行的幾大特點:
二、申請及額度
三、卡種推薦
(一)鉆石卡
主要權益:
(二)民生百夫長白金卡
主要權益:
https://creditcard.cmbc.com.cn/home/cn/web/product/high/baifu/index.shtml
(三)豪華白金卡
主要權益:
(四)香格里拉白金卡
主要權益:
(五)民生車車信用卡
主要權益:
標白:1500計積分+500加油(成本6元),返50元(實際返44元)。一年528元。每月2次洗車。年費可刷免。
豪白:3000計積分+1334加油(成本13元),返200元(實際返18元)。一年2244元。每月4次洗車。但需3600元年費,送1800積點。
鉆石卡:6500計積分+500加油(成本21元),返500元(實際返479元)。一年5748元。每月4次洗車。但需10000元年費,送5000積點。
https://creditcard.cmbc.com.cn/home/cn/web/product/travel/c25377/index.shtml
(六)航空聯名卡
https://creditcard.cmbc.com.cn/home/cn/web/product/travel/c5313265/index.shtml
(七)精英白金卡
主要權益:
(八)民生全幣種白金信用卡
四、積分及重要公告
(一)積分情況
1.常規刷卡消費,積分看商戶MCC。
https://creditcard.cmbc.com.cn/home/cn/web/customer/card/c9990602/20190822/10295104.shtml
2.線上支付有積分
全民生活APP支付(不含辦理分期付款)、銀聯云閃付APP掃碼支付,以及微信支付、支付寶、美團支付、京東支付、小米支付、滴滴支付、唯品支付等。
3.積分有效期:5年有效。
4.積分上限:單月按授信額度的2倍設定積分累計額度上限。
5.19家第三方支付機構的消費不累計積分。
https://creditcard.cmbc.com.cn/home/cn/web/customer/card/c9990602/20200619/16558447.shtml
6.民生天書:部分不累計積分的商戶列表
https://creditcard.cmbc.com.cn/home/cn/web/customer/card/c9990602/20190806/9990666.shtml
(二)多倍積分
1.所有卡生日當天3倍積分(聯名卡也是,月上限2倍額度)。
辦理附屬卡,可以享受多次生日3倍積分。
2.女人花卡:周四雙倍積分。
(三)積分價值
1.普通積分價值低,可以在積分商城換禮品,萬分價值10元左右。
2.普通積分兌換航空里程:
萬分價值26元(按里程萬400估算,兌換里程15比1)
通用積分兌換航空里程目前積分商城全部下架。
3.香格里拉豪華白金卡:萬分價值100元(1000香格里拉積分可抵扣100美元消費,可以賣300元)
4.香格里拉標準白金卡:萬分價值50元(1000香格里拉積分可抵扣100美元消費,可以賣300元)
5.航空聯名卡:萬分價值26元(按里程萬400估算,兌換里程15比1)
(四)重要公告
1.民生銀行零售客戶積分計劃
https://creditcard.cmbc.com.cn/home/cn/web/customer/card/konw/20180815/4360603.shtml
2.關于民生信用卡積分累計規則調整的公告
https://creditcard.cmbc.com.cn/home/cn/web/customer/import/20200615/16464771.shtml
五、活動推薦
1.全民節節高
2.惠買單,精選品牌5折起
3.全民星計劃
4.境外線上消費最高12%返現
5.高端美容SPA奢護禮遇
六、額度黨指南
由于民生的積分政策調整,目前能達到正收益的卡只有香格里拉聯名卡。
30萬額度選擇加辦香格里拉豪華白金卡,年費3600元。
賬單日后消費30萬,成本30*53=1590元,50天后還清,每年循環6次,總成本1590*6=9540元。
收益是30*6/60=3萬香格里拉積分,可以抵扣21000元消費,積分可以賣9000元。
30萬去買理財4%收益率,年收益12000元。
10萬額度選擇加辦香格里拉標準白金卡,無年費。
賬單日后消費10萬,成本10*53=530元,50天后還清,每年循環6次,總成本530*6=3180元。
收益是10*6/120=5000香格里拉積分,可以抵扣3500元消費,積分可以賣1500元。
10萬去買理財4%收益率,年收益4000元。
玩卡的初衷
是為了更美好的生活
把銀行禮品塞滿新買的大房子
是為了家人和朋友收到禮物后的欣喜
是為了更有品質的旅行
看看世界之大,其折或遠
avascript實現星星評價時,有想過最笨的辦法-手工畫五角星。 css樣式都寫了好大一串。很難優化!其實做法還有很多,本文就來說說直接用符號★就解決星星評價效果,有興趣的小伙伴可以看看!
先上圖看看吧:
操作原理:
1. 未點擊時的hover效果,星星會隨鼠標移動亮起來喔。
2. 點擊后關閉hover效果。
3. 點擊同一顆星星,星星可以隨時換色。
具體代碼如下:
html:
css:
js:
*請認真填寫需求信息,我們會在24小時內與您取得聯系。