成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

VUE+Express+MongoDB前后端分離實現一個便簽墻

瀏覽:3日期:2022-09-30 15:54:18

計劃來實現一個便簽墻系列,這個東西做簡單也簡單,往復雜了做功能也很多,記錄一下從零到有的開發過程吧,希望最后能把這個項目做得很完善。

首先是前后端分離架構,前端用vue,后臺我們就用express,數據庫用mongodb吧。

在腦袋里過一下,最最開始,要完成一個怎樣的雛形呢?先把用戶登錄管理放在一邊,當然是便簽的增刪改查+顯示啊!

那么,我們就來實現“初號機”,一張張便簽的顯示,增加,修改,刪除。

1、怎么說也得先把樣式畫出來

先別管接口,先把純前端的問題解決先,我們先來一個像模像樣的“黑板”,對了,這里推薦一個網站https://www.transparenttextures.com/,可以生成你喜歡的壁紙素材,于是就有了:

VUE+Express+MongoDB前后端分離實現一個便簽墻

好了,我們要在這塊黑板上“貼上”我們的便簽了,這一塊就是css的東西了,這個就看大家的美術設計功底了,我隨意了:

VUE+Express+MongoDB前后端分離實現一個便簽墻

那么重要的一點是,在這塊背景板上,便簽就應該是可以隨意貼在你想要的位置,所以對于便簽,用戶應該可以拖拽并記錄位置。

所以將便簽div采取position: absolute,然后用top: y px和left: x px來實現定位。

于是我們考慮單個便簽對象包含的屬性有:

x: 便簽距容器左側距離, left的值

y: 便簽距容器上邊界距離, top得值

txt: 便簽的內容

title: 標題

color: {

bg: '', // 背景色

pin: '' // 回形針顏色

}

接下來我們就來實現便簽的拖動:

(1) 在便簽的div上綁定鼠標點擊函數:

@mousedown='mousedown($event)'

(2) 實現拖動:

mousedown: function(event) { let _this = this; if (!this.isEdit) {this.startX = event.x;this.startY = event.y;this.note.moving = true;document.onmousemove = event => { if (!_this.note.moving) return false; let dx = event.x - _this.startX; let dy = event.y - _this.startY; if ( _this.note.x + dx <= 0 || _this.note.x + dx >= _this.width - 250 || _this.note.y + dy <= 60 ) { return false; } _this.note.x1 = _this.note.x + dx; _this.note.y1 = _this.note.y + dy;};document.onmouseup = () => { if (!this.isEdit) { this.note.moving = false; this.note.x = this.note.x1; this.note.y = this.note.y1; this.saveNote(); document.onmousemove = null; document.onmouseup = null; }}; } }

初始記錄x和y的副本為x1,y1。用startX和startY記錄下最開始鼠標按下的位置,然后在拖動過程中和原始值計算偏移量,賦值給x1和y1進行定位,在鼠標抬起時更新x,y為最終值。

這里有個關鍵點就是,如果用@mousemove,會導致在鼠標拖動過快的情況下,便簽不能及時跟隨鼠標,鼠標就會移出div,造成拖動失效。

所以這里只把mousedown綁定在目標上,而把mousemove和mouseup綁定在document上,這樣就不會擔心鼠標移快后出了便簽導致便簽卡住了。

2、對于便簽的內容,該怎么編輯

這里設計一個按鈕,鼠標hover上去后,顯示按鈕;點擊編輯按鈕,讓便簽內容變成可編輯的狀態,當內容區域blur的時候自動保存。

VUE+Express+MongoDB前后端分離實現一個便簽墻VUE+Express+MongoDB前后端分離實現一個便簽墻

由于div便簽沒有blur事件,所以在編輯狀態下,將內容區域變為textarea:

<div v-if='!isEdit' v-html='content' :ref='’note’ + index' ></div> <el-input v-else type='textarea' placeholder='請輸入內容' :autosize='{ minRows: 10 }' v-model='content' :ref='’note’ + index' @blur='handleChange' ></el-input>

很明顯,這里的內容得用innerHTML結果保存,因為我們要保存換行回車空格這些樣式,使顯示保持一致,所以在獲取編輯的字符串我們要用正則進行替換:

this.content = this.content

.replace(/rn/g, '<br/>')

.replace(/n/g, '<br/>')

.replace(/s/g, '&nbsp;');

變成編輯狀態時,我們要把形式再轉換一下給textarea:

this.content = this.content

.replace(/&nbsp;/g, ' ')

.replace(/<br/>/g, 'rn');

VUE+Express+MongoDB前后端分離實現一個便簽墻

3、下面不就是調接口的時候了

express框架這里就不再贅述了,我們用mongoose連接mongodb數據庫,創建controller文件夾,增加note.js來實現數據庫操作:

// controller/note.jsconst Notes = require('../model/notes');var mongoose = require(’mongoose’);module.exports = { updateNote(obj) { if (!obj.params._id) { obj.params._id = new mongoose.mongo.ObjectID(); } return Notes.findByIdAndUpdate( obj.params && obj.params._id, {$set: obj.body }, {upsert: true,new: true,setDefaultsOnInsert: true } ) .then(function (newobj) {return Promise.resolve({ status: 200, messgae: 'OK'}); }) .catch((err) => {return Promise.reject(err); }); }, getNotes() { return new Promise(function (resolve, reject) { Notes.find().then(function (newobj) { resolve(newobj);}).catch((err) => { reject(err);}); }); }, deleteNoteById(_id) { return Notes.findByIdAndDelete(_id) .then(function (newobj) {return Promise.resolve({ status: 200, messgae: 'OK'}); }) .catch((err) => {return Promise.reject(err); }); }};

這里先簡單寫寫,還可以進一步封裝好返回結果。

創建model文件夾,增加note.js存放Schema:

// model/note.jsvar mongoose = require('mongoose');var Schema = mongoose.Schema; // 聲明一個數據集 對象var noteSchema = new Schema({ txt: { type: String, required: false }, x: { type: Number }, y: { type: Number }, color: { type: Object }, title:{ type: String, default: '未命名' }, createTime: { type: Date, default: Date.now }});mongoose.set('useCreateIndex', true);mongoose.set(’useFindAndModify’, false);// 將數據模型暴露出去module.exports = mongoose.model('Notes', noteSchema, 'notes');

所以,在拖動結束時、便簽blur時都要自動保存。

于是數據庫里就會保存我們的便簽了:

VUE+Express+MongoDB前后端分離實現一個便簽墻

于是一個初步的雛形完成了,我們創建便簽,拖動,編輯,刪除,這些都是實時保存的,刷新頁面后便簽的位置都是能保留的。

下面看看效果:

VUE+Express+MongoDB前后端分離實現一個便簽墻

接下來,還有好多任務清單沒做呢,隨便一想,功能上能完善的就很多,例如:用戶管理、時間分類、多條件查詢、便簽內容支持富文本、便簽支持自定義樣式、備忘提醒功能等等。

再接再厲,任重道遠~~~~

大家也可關注一下Cavans小游戲系列:

《VUE實現一個Flappy Bird~~~》

《VUE+Canvas 實現桌面彈球消磚塊小游戲》

《VUE+Canvas實現雷霆戰機打字類小游戲》

到此這篇關于VUE+Express+MongoDB前后端分離實現一個便簽墻的文章就介紹到這了,更多相關vue前后端分離便簽墻內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
五月婷婷久久丁香| 国产欧美一区视频| 久久精品国产精品亚洲精品| 日韩视频在线观看国产| 国产欧美va欧美不卡在线| 成人黄色a**站在线观看| 欧美又粗又大又爽| 亚洲精品一二三四区| 欧美99在线视频观看| 精品国产伦一区二区三区免费| 国产一区二区女| 欧美精品日韩一本| 极品瑜伽女神91| 欧美调教femdomvk| 蜜桃精品视频在线观看| 在线视频你懂得一区| 日本一区中文字幕| 色av成人天堂桃色av| 日韩av一区二区三区| k8久久久一区二区三区| 亚洲麻豆av| 亚洲免费在线观看视频| 999在线观看精品免费不卡网站| 国产无遮挡一区二区三区毛片日本| 波多野结衣的一区二区三区| 337p日本欧洲亚洲大胆色噜噜| 成人免费毛片片v| 日韩午夜精品电影| 国产suv一区二区三区88区| 欧美一区二区三区免费观看视频 | 欧美裸体一区二区三区| 国产美女视频91| 51久久夜色精品国产麻豆| 国产成人精品免费视频网站| 欧美成人a在线| 色综合咪咪久久| 亚洲欧美在线aaa| 国产精品久久一区二区三区| 五月天久久比比资源色| 在线看国产日韩| 国产精品99久久久久久有的能看| 欧美成人三级电影在线| 欧美成人dvd在线视频| 国产精品福利一区| 亚洲精品一区二| 亚洲成人福利片| 欧美亚洲动漫另类| 国产乱码精品一区二区三区av | 欧美激情 亚洲a∨综合| 亚洲视频一区在线观看| 国产私拍一区| 毛片一区二区三区| 欧美tickle裸体挠脚心vk| 欧美精品亚洲| 亚洲一区二区在线视频| 欧美日韩综合在线免费观看| 波波电影院一区二区三区| 亚洲人一二三区| 在线观看亚洲a| 国产成人免费在线观看| 久久久蜜桃精品| 一区二区高清视频| 久久www免费人成看片高清| 久久毛片高清国产| 国产精品夜夜夜| 精品一区二区三区的国产在线播放| 精品国产1区二区| 亚洲精品美女91| 久久精品国产999大香线蕉| 久久这里只精品最新地址| 99精品欧美一区二区三区| 日本在线观看不卡视频| 日韩欧美高清dvd碟片| 国产一区在线免费观看| 亚洲国产wwwccc36天堂| 欧美一区二区三区在线| 欧美视频成人| 亚洲成人一区二区| 日韩久久久精品| 亚洲精品精选| 国产不卡视频一区| 亚洲综合一区二区| 欧美一区二区三区四区高清| 亚洲视频中文| 精品亚洲aⅴ乱码一区二区三区| 久久精品日韩一区二区三区| 国产精品一页| 不卡的看片网站| 亚洲国产色一区| 日韩午夜激情免费电影| 中文国产一区| 成人免费黄色大片| 一区二区三区高清不卡| 日韩欧美国产精品| 先锋影音国产精品| 成人av免费在线观看| 亚洲高清在线视频| 久久综合九色综合欧美98| 免费在线国产精品| 欧美高清视频一区| 日韩电影在线观看网站| 日本一区二区三区久久久久久久久不 | 亚洲尤物视频在线| 久久综合久久久久88| 色悠悠久久综合| 欧美一区二区三区久久精品| 蜜桃视频在线一区| 最新欧美精品一区二区三区| 欧美一区二视频| 亚洲一区图片| 91亚洲大成网污www| 日韩电影在线免费观看| 国产农村妇女精品| 欧美一区欧美二区| 久久精品日韩| 国产综合视频| 国产成人a级片| 亚洲bt欧美bt精品777| 国产精品色婷婷久久58| 制服丝袜av成人在线看| 99成人在线| gogo大胆日本视频一区| 日韩电影在线一区二区三区| 日韩一区在线播放| 精品av久久707| 91久久一区二区| 在线成人h网| 99视频一区二区| 久久国产日韩欧美精品| 亚洲免费av高清| 久久综合九色欧美综合狠狠| 欧美日韩综合色| 久久福利一区| 在线看无码的免费网站| 成人听书哪个软件好| 蜜桃精品视频在线| 午夜亚洲国产au精品一区二区 | 久久99精品国产| 亚洲成人福利片| 亚洲色欲色欲www在线观看| 久久亚洲综合av| 91麻豆精品国产无毒不卡在线观看| 狼狼综合久久久久综合网| 亚洲美女视频在线免费观看| 欧美日韩免费观看一区=区三区| 国产成人综合网| 人人超碰91尤物精品国产| 一区二区三区中文在线观看| 国产精品午夜电影| 亚洲国产精品高清| 久久先锋资源网| 精品久久久久久久久久久久久久久久久 | 久久九九全国免费| 日韩三级视频在线观看| 欧美久久久久久久久| 色狠狠一区二区| 性色一区二区| 99re66热这里只有精品4| 在线日韩欧美| 伊人久久亚洲影院| 欧美一区亚洲二区| 不卡一区在线观看| 丁香另类激情小说| 国产一区二区影院| 九九在线精品视频| 久久精品国产精品青草| 紧缚捆绑精品一区二区| 激情综合色播激情啊| 久久成人久久鬼色| 久久国产人妖系列| 久久精品国产一区二区三| 日韩制服丝袜先锋影音| 午夜精品在线视频一区| 亚洲国产成人91porn| 亚洲第一久久影院| 一区二区三区在线观看视频| 日韩毛片视频在线看| 亚洲欧洲日产国码二区| 国产精品免费观看视频| 国产精品国产三级国产有无不卡| 国产精品免费aⅴ片在线观看| 国产精品久久久久影视| 成人免费在线视频| 亚洲美女视频在线观看| 一区二区日韩av| 性做久久久久久免费观看| 五月婷婷综合激情| 免费人成网站在线观看欧美高清| 久久精品久久99精品久久| 国产电影精品久久禁18| 成人性生交大片免费看中文| 成人av网站在线观看免费| 午夜精品亚洲| 亚洲国产一区二区三区a毛片| 国产婷婷精品| 在线亚洲高清视频| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲成av人片在www色猫咪| 日韩精品电影在线| 黑人巨大精品欧美黑白配亚洲|