github地址:https://github.com/qiuyaofan/iShow html
文檔:https://qiuyaofan.github.io/iShow/ vue
網站在線地址:https://qiuyaofan.github.io/ishowPagegit
今年年初,開始斷斷續續打磨本身的vue編輯器,到如今也有半年有餘。目前是ishow1.0版本,後續會不斷完善,也歡迎你們貢獻本身的想法,共同進步。若是喜歡這個項目,記得star哦~github
什麼都不說,先上圖vuex
ishow v1.0功能列表 一:字體編輯 1.普通樣式:背景顏色,文字顏色,字體,對齊,透明度,邊距,行高,大小,加粗,傾斜,下劃線,清除格式 2.邊框樣式:寬度,顏色,類型,圓角 3.陰影樣式:陰影顏色,大小,半徑,方向 4.點擊可修改文字,拖拽改變位置 二:圖片編輯 基本編輯:參考字體編輯 添加圖片,替換圖片 拉伸改變大小,旋轉 上傳圖片 圖片選擇彈層有:預覽,裁切(後臺未接),選擇,刪除等功能 三:動畫效果 打字機,漸變,淡入淡出,旋轉,縮放等,動畫種類參考易企秀 時間,延時,添加動畫,預覽動畫,清除動畫 多個動畫 次數,循環(1.0暫不實現) 四:左側頁面總預覽 添加新一頁,刪除,排序(1.0暫不實現) 五:鍵盤操做 左右鍵移動元素 刪除鍵刪除選中元素 撤銷ctrl+z(最多緩存40個操做) 六:層級調整(還需完善優化) 七:表單配置添加 目前支持表單類型:輸入框,單選,多選,下拉,按鈕 支持添加驗證 八:h5提交配置 標題,封面等 九:保存,發佈(模版,h5 json) 十:多媒體 背景添加 音頻添加 視頻添加(1.0暫不實現) 十一:模版管理(1.0暫不實現,須要後臺配合) 編輯模版,搜索模版 十二:手機端渲染 根據json完成動畫播放,翻頁,音頻播放,屏幕適配等 表單提交後臺(未實現)
IUI組件部分json
swiper:http://www.swiper.com.cn/api/index.html api
餓了麼element:http://element.eleme.io/#/zh-CN/component/installation 數組
參考的開源架子:https://github.com/PanJiaChen/vue-element-admin緩存
編輯器最終生成的是json配置,手機端經過json配置渲染出相應的樣式,動畫等。iphone
目前編輯器是用mock實現模擬接口,若是須要換回本身的接口
1.去除config.js的mock調用
2.修改utils/fetch.js代碼
//mock.js resolve(res); //沒有mock // if (res.code === 40001) { // // 登出 // store.dispatch('FedLogOut').then(() => { // router.push({ path: '/login' }) // }); // } else if (res.code !== 200) { // Message({ // message: res.msg, // type: 'error', // duration: 5 * 1000 // }); // reject(res); // } else { // resolve(res); // } 註釋掉resolve(res); 下面的取消註釋便可
json格式以下所示
var JSON={ "page":[ { "page": 1, "json": [ { /*** 控件類型 "1":"text", "2":"img", "3":"textarea", "4":"radio", "5":"checkbox", "6":"select", "7":"button" ***/ "type": 2, "content": "https://img.kxz.com/assets/kxz/fixedInputCover1_20170630/fb7bf5d8-56d6-46ea-a01b-35e6943647da_demo1-4.png", // 位置 "position": { "top": 360, "left": 201 }, "width": 175, "height": 125.2680965147453, //基本樣式屬性 "text": { "backgroundColor": "rgba(0,0,0,0)", "opacity": 100, "padding": 0, "rotate": 94, "borderWidth": 0, "borderRadius": 0, "borderColor": "rgba(204, 204, 204,1)", "borderStyle": "solid", "shadowColor": "rgba(204, 204, 204,1)", "shadowWidth": 0, "shadowRadius": 10, "shadowDire": 0 }, //動畫類型,支持多動畫 "animate": [ { "animationName": "fadeIn", "animationDuration": 2, "animationTimingFunction": "ease", "animationDelay": 0.4, "animationFillMode": "both", "animationPlayState": "initial", "isOut": false } ], "id": 1501745923909, //層級 "zIndex": 6 } ], //這一頁的背景圖片 "bgImage": { "backgroundColor": "", "coord": "", "url": "" } }, ], //配置 "setting": { //背景音樂 "bgMusic": { "url": "ttp://192.168.1.100:8080/uploadfile/3/15/5/8765a93f-351e-4984-8a03-6ef746ea36fd_bg.mp3", "name": "enemy2_down.mp3" } } };
使用vue以來遇到的一些問題及解決辦法,分享給你們,但願對你有幫助
1.element date組件
報錯內容:TypeError: value.getTime is not a function
原理:插件生成和默認值須要是Fri Sep 08 2017 16:25:00 GMT+0800 (CST)這種格式,但項目中一般是YYYY-MM-DD hh:mm:ss格式,因此報錯.
解決辦法:
後臺修改存儲類型,或者
//提交時 momentChange(date) { return date?this.moment(date).format('YYYY-MM-DD'):''; }, //獲取默認值回填前 dateChange(date){ return date?new Date(date):''; }
2.組件間調用
//子組件調用 <main-editor ref="chileComponentName"></main-editor> 層級少可使用this.$refs.chileComponentName.method 層級多借助bus.js或者vuex //父組件調用 this.$parent.method // 當前父元素 this.$el
3.element驗證的坑
常常加了type="number"報錯,而後搜到答案v-model.number="",而後發現 11.ee竟然驗證經過?!
實際上是v-model.number會自動把11.ee轉爲11去驗證
解決辦法:
<el-form-item label="手機號碼" class="mb20 is-required" prop="mobile"> <el-input v-model.number="mobile" :maxlength="11"></el-input> </el-form-item> data() { let validateMobile = (rule, value, callback) => { if (!value||(value + '').length !== 11) { callback(new Error('手機號碼必須爲11位純數字')); } else { callback(); } }; return { mobile:'', rules: { mobile: [ {validator: validateMobile, trigger: 'blur'} ] } } }
4.經過el-upload上傳七牛
<el-upload action="http://up-z1.qiniu.com/" :data="uploadForm" list-type="picture-card" :file-list="fileList" :on-preview="preview" :on-remove="remove" :before-upload="beforeUpload" name="file" :on-change="upload" :thumbnail-mode="true" :on-success="handleSuccess"> </el-upload> //獲取token接口函數 import {getUploadToken} from 'api'; method:{ beforeUpload(file) { //拿到token return getUploadToken().then(response => { //後臺根據七牛的密鑰生成的token this.uploadForm.token = response.data.token; //咱們生成惟一的key this.uploadForm.key = this.createKey(file); //前綴:在線路徑的前綴 this.prefix = response.data.prefix; }).catch(err => { console.info(err) }); }, createKey(file) { let curr = this.moment().format('YYYYMMDD').toString(); let prefix = this.moment(file.lastModified).format('HHmmss').toString(); let suffix = file.name; let key = encodeURI(`${curr}/${prefix}_${suffix}`); return key; }, handleSuccess(response, file, fileList) { //拼接成能訪問的在線連接 console.info(this.prefix + response.key); } }
5.vue屬性
1.添加background-image時 <div :style="{ 'background-image': 'url(' + imageUrl + ')' }"> </div> 2.添加數組到style <div :style="[textJson,animateJson]"></div> //data舉例 data() { return { textJson:{ "backgroundColor": "rgba(0,0,0,0)", "opacity": 100, "padding": 0, "rotate": 0, "borderWidth": 0, "borderRadius": 100, "borderStyle": "solid", "shadowColor": "rgba(204, 204, 204,1)", "shadowWidth": 0, "shadowRadius": 10, "shadowDire": 0, "borderColor": "rgba(204, 204, 204,1)" }, animateJson:{ animationName:'fadeIn' } } }
今天就分享到這裏啦~~