Angular 2.0 文本拖拽
基于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 文本拖拽的更多相关文章
- 使用angular帮你实现拖拽
拖拽有多种写法,在这里就看一看angular版的拖拽. <!DOCTYPE html> <html ng-app="myApp"> <head> ...
- Android4.0 Launcher拖拽原理分析
在Android4.0源码自带的Launcher中,拖拽是由DragController进行控制的. 1) 先来看看类之间的继承关系 2)再来看看Launcher拖拽流程的时序图 1.基本流程: ...
- ajax2.0之拖拽上传
index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...
- [ActionScript 3.0] AS3 拖拽混动效果之一
package { import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; impor ...
- JD . 简单的网站构成、引入图标、去除 图片间距/加粗/倾斜/下划线/蓝色外边框 禁止文本拖拽、文字居中、做logo、模拟鼠标 、不使用hover外部css样式实现hover鼠标悬停改变样式
模拟京东案例准备: 截图(效果图PSD文件) 搭建项目环境 (结构样式行为分离) HTML 核心文件 index.html CSS 控制样式 base.css(基础样式 ...
- as3文本框的动态拖拽和编辑
如今非常多软件都支持了编辑界面的文本拖拽和点击编辑来直接改动数值, 这样便于操作, 并且体验性也好, 抛砖引玉吧 于是就用好久没编写的as3来写了一下: 由于用的flash ide写的没有提示, 就临 ...
- html5 Sortable.js 拖拽排序源码分析
最近公司项目经常用到一个拖拽 Sortable.js插件,所以有空的时候看了 Sortable.js 源码,总共1300多行这样,写的挺完美的. 本帖属于原创,转载请出名出处. 官网http:// ...
- jsDOM编程-拖拽层
页面样式代码: <!doctype html><html><head><meta http-equiv="content-type" co ...
- 这交互炸了(四) :一分钟让你拥有微信拖拽透明返回PhotoView
本文已授权微信公众号:鸿洋(hongyangAndroid)原创首发 <交互炸了>或许是一系列高端特效教程, 文中会介绍一些比较炫酷的特效,以及实现的思路.特效实现本身也许不会有太大的难度 ...
随机推荐
- 事件&vue修饰符
JavaScript 事件 HTML事件是发生在HTML元素上的事情.当在HTML页面帐使用JavaScript时,javascript可以触发这些事件 HTML 事件 HTML事件可以是浏览器的行为 ...
- 剑指offer 39. 是否为平衡二叉树
39. 是否为平衡二叉树 题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树 任意结点的左右子树高度差不大于1就是平衡二叉树. C++解法 class Solution { public: boo ...
- H3C RIP配置
一.RIP简介 RIP(Routing Information Protocol,路由信息协议)是一种较为简单的内部网关协议(Interior Gateway Protocol,IGP),主要用于规模 ...
- [HNOI2004] L语言 - AC自动机,dp
给定字典和没有标点的文章,求能够被识别的最长前缀. 显然不能贪心,设\(f[i]\)表示前\(i\)个字符构成的前缀能否被识别,然后在AC自动机上暴力转移即可. 具体来说,每走到一个新位置,就沿着fa ...
- [转]shallow heap & retained heap
所有包含Heap Profling功能的工具(MAT, Yourkit, JProfiler, TPTP等)都会使用到两个名词,一个是Shallow Size,另一个是 Retained Size. ...
- SpringBoot整合WEB开发--(六)CROS支持
简介: CROS(Cross-Origin Resource Sharing)是由W3C制定的一种跨域资源共享技术标准,其目的为了解决前端的跨域请求,在JavaEE开发中,最常见的前端跨域请求解决方案 ...
- BUUCTF [SUCTF 2019]EasySQL
首先打开网址 发现有三种显示方法 还有一个没有输出 可以堆叠注入 1;show databases; 1;show tables; 可以看到有一个Flag表 测试发现from flag都被过滤不能直接 ...
- layer iframe 设置关闭按钮 和刷新
layer.open({ type: 2, title: 'XXXX网吧历史更多数据', shade:0, // closeBtn:0, resize:false, move:false, shade ...
- jQuery捕获
获得内容 - text().html() 以及 val() 三个简单实用的用于 DOM 操作的 jQuery 方法: text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元 ...
- js时间相关操作
取值 this.divEndDate.attr("value",new Date()); var date = new Date(); date.getYear(): 取2 ...