基于Angular7.1和TypeScript实现

Html代码

                   <div style="padding-left: 0px;">
<div id='contentTem' class='temp-style' contentEditable="true" (drop)="drop($event)" (dragover)="allowDrop($event)">
1</div>
<div>
效果预览
<div class='temp-style' style="min-height: 150px;" id='preview'></div>
</div>
</div>
<div>
<div><a href="javascript:(0)" ng-click='Edit()'>新增自定义参数</a></div>
<div class='temp-style option'>
<div>
<span id='t1' contenteditable="false" draggable="true" (dragstart)="drag($event)">[拖拽]</span>
</div>
<div>
<span id='t2' contenteditable="false" draggable="true" (dragstart)="drag($event)">[拖拽2]</span>
</div>
</div>
</div>

TS代码

   allowDrop = function (ev) {
$("#contentTem")[].focus();
ev.preventDefault();
} drag = function (ev) {
$("#contentTem")[].focus();
var selection = window.getSelection()
// 设置最后光标对象
this.lastEditRange = selection.getRangeAt();
ev.dataTransfer.setData("Text", ev.target.id);
} drop = function (ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("Text");
this.insertHtmlAtCaret($("#" + data).html())
} insertHtmlAtCaret = function (html) {
if (html == undefined) {
return;
}
var selection;
selection = getSelection()
// 设置最后光标对象
this.lastEditRange = selection.getRangeAt();
this.lastEditRange.deleteContents();
//判断是否是拖拽
var htmlData = "";
if (html != undefined) {
htmlData = html;
} else {
htmlData = $("#contentTem").html();
} if (selection.anchorNode.data != undefined && selection.anchorNode.data.indexOf("[Key]") > -) {
htmlData = htmlData.replace(/\[Key]/g, '<span style="color:red" contentEditable="false">[显示内容]</span>');
$("#contentTem").html('');
$("#contentTem")[].focus();
var el = document.createElement("div");
el.innerHTML = htmlData;
var frag = document.createDocumentFragment(), node, lastNode;
while ((node = el.firstChild)) {
lastNode = frag.appendChild(node);
}
//将内容填充进去
this.lastEditRange.insertNode(frag);
if (this.lastEditRange) {
//重新设置光标位置
this.lastEditRange = this.lastEditRange.cloneRange();
this.lastEditRange.setStartAfter(lastNode);
this.lastEditRange.collapse(true);
selection.removeAllRanges();
selection.addRange(this.lastEditRange);
}
} else {
htmlData = '<span style="color:red" contentEditable="false">' + htmlData + '</span>';
var el = document.createElement("div");
el.innerHTML = htmlData;
var frag = document.createDocumentFragment(), node, lastNode;
while ((node = el.firstChild)) {
lastNode = frag.appendChild(node);
}
//将内容填充进去
this.lastEditRange.insertNode(frag);
if (this.lastEditRange) {
//重新设置光标位置
this.lastEditRange = this.lastEditRange.cloneRange();
this.lastEditRange.setStartAfter(lastNode);
this.lastEditRange.collapse(true);
selection.removeAllRanges();
selection.addRange(this.lastEditRange);
}
}
//预览区域
var previewHtml = $("#contentTem").html();
previewHtml = $("#contentTem").html().replace(/\[Key]/g, '显示内容');
$("#preview").html(previewHtml);
}

因为完成的比较匆忙,功能实现的不完美,后续在优化

Angular 2.0 文本拖拽的更多相关文章

  1. 使用angular帮你实现拖拽

    拖拽有多种写法,在这里就看一看angular版的拖拽. <!DOCTYPE html> <html ng-app="myApp"> <head> ...

  2. Android4.0 Launcher拖拽原理分析

    在Android4.0源码自带的Launcher中,拖拽是由DragController进行控制的. 1) 先来看看类之间的继承关系 2)再来看看Launcher拖拽流程的时序图   1.基本流程: ...

  3. ajax2.0之拖拽上传

    index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...

  4. [ActionScript 3.0] AS3 拖拽混动效果之一

    package { import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; impor ...

  5. JD . 简单的网站构成、引入图标、去除 图片间距/加粗/倾斜/下划线/蓝色外边框 禁止文本拖拽、文字居中、做logo、模拟鼠标 、不使用hover外部css样式实现hover鼠标悬停改变样式

    模拟京东案例准备: 截图(效果图PSD文件) 搭建项目环境     (结构样式行为分离)   HTML 核心文件     index.html CSS       控制样式 base.css(基础样式 ...

  6. as3文本框的动态拖拽和编辑

    如今非常多软件都支持了编辑界面的文本拖拽和点击编辑来直接改动数值, 这样便于操作, 并且体验性也好, 抛砖引玉吧 于是就用好久没编写的as3来写了一下: 由于用的flash ide写的没有提示, 就临 ...

  7. html5 Sortable.js 拖拽排序源码分析

    最近公司项目经常用到一个拖拽 Sortable.js插件,所以有空的时候看了 Sortable.js 源码,总共1300多行这样,写的挺完美的.   本帖属于原创,转载请出名出处. 官网http:// ...

  8. jsDOM编程-拖拽层

    页面样式代码: <!doctype html><html><head><meta http-equiv="content-type" co ...

  9. 这交互炸了(四) :一分钟让你拥有微信拖拽透明返回PhotoView

    本文已授权微信公众号:鸿洋(hongyangAndroid)原创首发 <交互炸了>或许是一系列高端特效教程, 文中会介绍一些比较炫酷的特效,以及实现的思路.特效实现本身也许不会有太大的难度 ...

随机推荐

  1. 搜索字母a或A

    Amy觉得英语课实在是无聊至极,他不喜欢听老师讲课. 但是闲着也是闲着,不如做点什么吧?于是他开始数英语书里的字母a和A共出现了多少次. 费了九牛二虎之力终于数完了. 作为一名软件工程专业大学生,他觉 ...

  2. CSS一些特殊图形

    CSS一些特殊图形 CSS绘制三角形 通过控制元素的border属性可以实现三角形效果; 首先来设置4个边框, 为50px solid [color] color设置成不同的颜色值看一下效果 < ...

  3. webpack如何编译ES6打包

    前言:随着ES的普及我们越来越多的开始使用ES6的语法了,当然也随着mvvm框架的流行少不了js模块化,那js模块化又有那些呢 在很早的时候大家都用的命名空间,现在也有人用(库名.类别名.方法名) 后 ...

  4. Docker+JMeter单机版+MinIO

    基于JMeter5.1.1+MinIO JMeter发起压测  MinIO作为文件服务器 一.目录结构: Dockerfile文件: FROM ubuntu:18.04# 基础镜像 MAINTAINE ...

  5. 洛谷P1093 奖学金

    https://www.luogu.org/problem/P1093 #include <bits/stdc++.h> using namespace std; struct Node{ ...

  6. linux学习笔记1:linux驱动设备概述

  7. http接口性能测试工具

    一. http_load 程序非常小,解压后也不到100K.http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载. 但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一 ...

  8. C++学习书籍评价

    1.C++程序设计-现代方法 本书非常适合学习了C语言基础,想跨步到C++学习的同学,前20章都是C基础的回顾,简直不要太简单,后面的课后习题花了半个小时做完了,没怎么出错,嗯,我的C语言基础还是可以 ...

  9. dojo - 相关教程

    https://blog.csdn.net/dojotoolkit/article/details/6688058

  10. ms2

    # 准备: robots UA 池 图片懒加载 cookie IP ajax js 加密(js逆向 字体加密/大众点评/ base64 md5 AES python复写 要不就是第三方库执行js代码) ...