HTML5实现一个可编辑的模板页面

需求:公司在给学校做项目,有一个页面要展示一些考号,座号之类的东西,因为要经常修改,所以在后台要做一个能够自定义的页面,效果如下

演示动图


创建的组件分为两种:文本组件(自定义要显示的文本,如标题等),数据组件(如座位号等,只能修改宽高等,内容不可直接编辑)。

首先说明编辑功能的基本实现


1:布局



在每个创建出的组件中,绿色的div(.container)是最外层的div,蓝色的span是用来编辑文本的,上面的工具条也在container中,使其向上偏移显示在外面。顶部的红色长条div(.move)是隐藏起来的,将拖动事件添加到它上面。右下角有一个正方形的div(.zoom),将缩放事件添加到它上面。


2:编辑功能

一般编辑文本使用的是input,但这里用input显然不行,给上图中蓝色的span(也可以是div)添加上contenteditable="true"属性,就可以对其内容进行编辑了。


3:拖动

由于所有的dom都在container中,所以拖动时只需要改变container的位置即可。


$container.find('.move').on('mousedown', function(e) {
				
				var $element = $(this).parent();
				disX = e.pageX - $element.offset().left;
				disY = e.pageY - $element.offset().top;
				$(document).on('mousemove', function(e) {
					var x = e.pageX - disX;
					var y = e.pageY - disY;
					
					$element.css('left', x);
					$element.css('top', y);
					//限制拖动范围
					if(x<=0){
						$element.css('left', 0);
					}
					if(y<=35){
						$element.css('top', 35);
					}
					//组件靠近顶部时,工具条显示在下方
					if(y<=70){
						$element.find('.editBox').removeClass('editBoxTop').addClass('editBoxBot');
					}else{
						$element.find('.editBox').removeClass('editBoxBot').addClass('editBoxTop');
					}
					
					return false; //防止鼠标移动时选中文字
				})

				$(document).on('mouseup', function() {
					$(this).off('mousemove');
				})
			})


在基本的拖动上加上范围限制,防止组件被拖出页面,同时在组件靠近顶部时,让工具条显示在下方。


4:缩放

$container.find('.zoom').on('mousedown', function(e) {		
				cancelBubble(e);	
				var $element = $(this).parent(); 
				$(document).on('mousemove', function(e) {
					var x = e.pageX - $element.offset().left; //pagex和offset获取的都是相对document左上角的位置
					var y = e.pageY - $element.offset().top;
					$element.css('width', x);
					$element.css('height', y);								
					return false; //防止鼠标移动时选中文字
				})

				$(document).on('mouseup', function() {
					$(this).off('mousemove');
				})
			})


这段实现的是缩放的基本功能,后面还要限制他的最小宽高。cancelBubble是取消冒泡的函数

//取消冒泡函数
		function cancelBubble(e) {
			document.all ? (e.cancelBubble = true) : (e.stopPropagation());
		}

5:工具条

工具条里的功能基本就是对文本进行操作的,在相应的按钮上添加上功能就行了,这里的颜色选择器我使用的一个叫jscolor的插件,在博客里也有些。


6:源码

额,其他地方都是一些DOM和样式的操作,就不在这里一一列举了,放出源码吧,里面有注释(有点乱抱歉= =!),有兴趣的可以看看,有问题可以留言。


CSDN:http://download.csdn.net/download/huangxin112/10175982

CSDN上传时积分最低只能选2分,不能免费,在百度云又传了一份

https://pan.baidu.com/s/1c1Fxa5i





  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值