VUE+Express+MongoDB 앞 뒤 분리 메모지 벽 구현
우선 앞 뒤 단 분리 구조 입 니 다.앞 단 은 vue 를 사용 하고 배경 은 express 를 사용 합 니 다.데이터 베 이 스 는 mongodb 를 사용 합 니 다.
머 릿 속 을 지나 가면 처음에 어떤 모양 을 완성 해 야 합 니까?먼저 사용자 로그 인 관 리 를 제 쳐 두 세 요.당연히 메모지 의 첨삭 검사+표시 입 니 다!
그러면 우 리 는'초호 기'를 실현 하고 메모지 한 장의 표시,증가,수정,삭 제 를 실현 합 니 다.
1、아무래도 먼저 스타일 을 그 려 야 한다
우선 인 터 페 이 스 를 상관 하지 말고 순 전단 의 문 제 를 먼저 해결 합 시다.우 리 는 먼저 그럴듯 한'칠판'을 하 겠 습 니 다.참,여기 서 사 이 트 를 추천 합 니 다.https://www.transparenttextures.com/당신 이 좋아 하 는 벽지 소 재 를 만 들 수 있 기 때문에:
자,우 리 는 이 칠판 에 우리 의 메 모 를 붙 여야 합 니 다.이것 은 바로 css 의 물건 입 니 다.이것 은 여러분 의 미술 디자인 기 초 를 보 겠 습 니 다.저 는 마음대로 하 겠 습 니 다.
그렇다면 중요 한 것 은 이 배경 판 에 메 모 는 원 하 는 위치 에 마음대로 붙 일 수 있어 야 하기 때문에 메 모 는 사용자 가 끌 어 당 겨 서 위 치 를 기록 할 수 있어 야 한 다 는 것 이다.
그래서 메모 div 를 position:absolute 를 사용 한 다음 에 top:y px 와 left:x px 로 포 지 셔 닝 을 실현 합 니 다.
그래서 우 리 는 하나의 메모지 대상 에 포 함 된 속성 을 고려 합 니 다.
x:메모 거리 용기 왼쪽 거리,left 값
y:메모 용기 경계 거리,top 값
메모 내용
제목:제목
color: {
bg:",/배경 색
클립 색상
}
이어서 우 리 는 메모지 의 드래그 를 실현 할 것 이다.
(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 시 자동 으로 저장 합 니 다.
div 메모 에 blur 이벤트 가 없 기 때문에 편집 상태 에서 내용 영역 을 textarea 로 변경 합 니 다.
<div
class="note-content"
v-if="!isEdit"
v-html="content"
:ref="'note' + index"
></div>
<el-input
v-else
class="note-content my-textarea"
type="textarea"
placeholder=" "
:autosize="{ minRows: 10 }"
v-model="content"
:ref="'note' + index"
@blur="handleChange"
></el-input>
분명히 이 내용 은 innerHTML 결과 로 저장 해 야 합 니 다.줄 을 바 꾸 고 빈 칸 으로 돌아 가 는 스타일 을 저장 해 야 하기 때문에 디 스 플레이 를 일치 하 게 유지 해 야 합 니 다.따라서 편집 한 문자열 을 가 져 오 려 면 정규 로 교체 해 야 합 니 다.this.content = this.content
.replace(/\r/g, "
")
.replace(//g, "
")
.replace(/\s/g, " ");
편집 상태 가 되 었 을 때,우 리 는 형식 을 textarea 에 다시 바 꿔 야 한다.
this.content = this.content
.replace(/ /g, " ")
.replace(/
/g, "\r");
3.아래 는 인 터 페 이 스 를 바 꿀 때 가 아니다.
express 프레임 워 크 는 더 이상 군말 하지 않 습 니 다.우 리 는 mongoose 로 mongodb 데이터 베 이 스 를 연결 하고 controller 폴 더 를 만 들 며 note.js 를 추가 하여 데이터 베 이 스 를 실현 합 니 다.
// controller/note.js
const 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);
});
}
};
여기에 먼저 간단하게 쓰 고 결 과 를 되 돌려 줄 수 있다.모델 폴 더 를 만 들 고 note.js 저장 스키 마 를 추가 합 니 다.
// model/note.js
var 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");
따라서 드래그 가 끝 날 때,메모 블 러 는 자동 으로 저 장 됩 니 다.그래서 데이터베이스 에 우리 의 메 모 를 저장 할 것 이다.
그래서 초보 적 인 초기 형태 가 완성 되 었 습 니 다.우 리 는 메 모 를 만 들 고 드래그,편집,삭제 합 니 다.이것들 은 모두 실시 간 으로 저 장 된 것 입 니 다.페이지 를 새로 고 친 후에 메모지 의 위 치 는 모두 보존 할 수 있 습 니 다.
다음은 효과 보기:
그 다음 에 아직도 많은 작업 목록 을 하지 않 았 습 니 다.마음대로 생각해 보면 기능 이 완 선 될 수 있 는 것 이 많 습 니 다.예 를 들 어 사용자 관리,시간 분류,다 중 조건 조회,메모 내용 지원 부 텍스트,메모 지원 사용자 정의 스타일,메모 알림 기능 등 이 있 습 니 다.
더욱 분발 하여 임 무 는 무 겁 고 갈 길 은 멀다~~~
여러분 도 Cavans 미니 게임 시리즈 에 관심 을 가 져 보 세 요.
<VUE:플 래 피 버드 하나 실현~~>
《VUE+Canvas,데스크 톱 당구 벽돌 제거 미니 게임 실현》
《VUE+Canvas 뇌 정전 기 타자 류 미니 게임 실현》
여기에 VUE+Express+MongoDB 의 앞 뒤 가 분리 되 어 하나의 메모지 벽 을 실현 하 는 것 에 관 한 글 을 소개 합 니 다.vue 앞 뒤 가 분리 되 어 있 는 메모지 벽 에 관 한 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Fastapi websocket 및 vue 3(Composition API)1부: FastAPI virtualenv 만들기(선택 사항) FastAPI 및 필요한 모든 것을 다음과 같이 설치하십시오. 생성main.py 파일 및 실행 - 브라우저에서 이 링크 열기http://127.0.0.1:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.