web端创建直播(layui表单,layui时间选择,简介富文本嵌套iframe,获取iframe里的方法的值,layui列表模板、CheckBox取值checked,数组数字总和)

48 篇文章 4 订阅
8 篇文章 1 订阅

难点:
1、layui开始时间选择(不能小于当前时间天时分秒)
2、layui select的选择 (固定数据)
3、获取班级列表(判断班级人数给提示、班级列表模板)
4、富文本的简介,包含上传图片
5、计算时长
6、选择时长后,选中班级要变时长,选班级再选时长要变时长。


在这里插入图片描述

弹出层内容

<!-- 创建直播 -->
<div class="addlivebox" style="display: none;">
	<form class="layui-form" action="">
		<div class="formflex">
			<div class="layui-form-item">
				<label class="layui-form-label">标题</label>
				<div class="layui-input-block">
					<input type="text" name="title" required  lay-verify="required" 
					placeholder="请输入直播标题" autocomplete="off" 
					class="layui-input" style="width:250px">
				</div>
			</div>
			<div class="layui-form-item">
				<label class="layui-form-label">开始时间</label>
				<div class="layui-input-block">
					<input type="text" id="startTime" value="" readonly="true" 
					class="layui-input" placeholder="请选择开始时间" 
					onclick="layui.laydate(
					{elem: this, istime: true, format: 'YYYY-MM-DD hh:mm',min: 
					laydate.now()})" 
					style="width: 250px;">
				</div>
			</div>
			<div class="layui-form-item">
				<label class="layui-form-label">直播时长</label>
				<div class="layui-input-block">
					<select id="time" name="time">
						<option value="">请选择直播时长</option>
						<option value="30">0.5小时</option>
						<option value="60">1小时</option>
						<option value="90">1.5小时</option>
						<option value="120">2小时</option>
						<option value="150">2.5小时</option>
					</select>
				</div>
			</div>
			<div class="layui-form-item">
				<label class="layui-form-label">选择班级</label>
				<div class="layui-input-block" id="view"></div>
			</div>
		</div>
		<div class="formflex">
			<div class="layui-form-item">
				<label class="layui-form-label">简要介绍</label>
				<div class="layui-input-block">
					 <iframe src="/shared/index/editor?type=40" width="410px" 
					 frameborder="0" id="editoriframe"></iframe>
				</div>
			</div>
		</div>
	</form>
	<div class="addliveinfo">
		<div class="colorred">预计消费直播时长<span data-role="alltime">0</span>小时</div>
		<div>时长消费 = 学生人数 * 单次上课时长</div>
		<div class="color098AFF">您的剩余直播时长 <?php echo $livetotaltime; ?> 小时</div>
		<div>若余长不足,请先充值购买直播时长。购买方式:在微课之家网站www.wkzj.com个人中心-
		我的账户中购买</div>
	</div>
</div>

班级列表模板

<script id="demo" type="text/html">
  {{#  layui.each(d, function(index, item){ }}
	<div class="selectclass">
		{{#  if(item.CLASSLOGO == ''){ }}
		<img src="/static/shared/images/yk.png" />
		{{#  }else{ }} 
		<img src="{{ item.CLASSLOGO }}" />
		{{#  } }}
		<div class="name">{{ item.CLASSNAME }}</div>
		<div class="classcheckbox" data-clsid="{{ item.CLSID }}" 
			data-num="{{ item.STUDENTNUM }}">
			<input type="checkbox" name="classlist">
		</div>
	</div>
  {{#  }); }}
  {{#  if(d.length === 0){ }}
   暂无班级
  {{#  } }} 
</script>
layui.use(['element', 'layer', 'form','laydate','laytpl'], function() {
	var form = layui.form();
	var laydate = layui.laydate;
	var laytpl = layui.laytpl;
	
	//模板
	function renderDate(selector, data) {
		var htmls = $("#demo").html();
		laytpl(htmls).render(data, function(html) {
			$(selector).html(html);
		});
	};
})

renderDate("#view", classinfo); //调用方法

classinfo 的数据格式是
在这里插入图片描述

layui开始时间选择

layui.laydate({elem: this, istime: true, format: ‘YYYY-MM-DD hh:mm’,min: laydate.now()})

老版本写在行内
在这里插入图片描述在这里插入图片描述

CheckBox获取选中的值

$(document).on('click','.classcheckbox input',function(){
	_nums = $(this).parent().attr('data-num');
	var clsidarr = []; //班级id的数组
	var numarr = [];
	_newnums = 0; // 直播时长为0 赋值
	$("[name=classlist]:checkbox").each(function(i){
		if(_nums == '0'){ //判断当前班级没有学生时
			layer.alert('当前班级没有学生,请先添加学生');
			$(this).prop("checked",false);
			return;
		}else{
			if ($(this).prop("checked") == true){
				clsidarr.push($(this).parent().attr('data-clsid')); //获取值
				numarr.push($(this).parent().attr('data-num')); //获取值
				_newnums = eval(numarr.join("+")); //获取班级人数总和
			} 
		}
	})	
	var _time = $('select[name="time"]').val();
	var alltime = (_newnums * _time) / 60;
	if($('input[name="switch"]').prop("checked") == true){
		msgtime = (_newnums * 3)/60;
		$('[data-role="alltime"]').html(alltime + msgtime);
	}else{
		$('[data-role="alltime"]').html(alltime);
	}
	console.log(clsidarr);
	clsidarrnew = clsidarr;
});

富文本

用iframe表示
<iframe src="/shared/index/editor?type=40" width="410px" frameborder="0" id="editoriframe"></iframe>
这个页面里方法都封装了。直接调用就可以了 。

获取iframe里的方法
$("#editoriframe")[0].contentWindow.方法名();

editor = $("#editoriframe")[0].contentWindow.getContent();//获取编辑器内容
fileidArr = $("#editoriframe")[0].contentWindow.getFileidArr();//获取上传图片id
base64Content = $("#editoriframe")[0].contentWindow.getBase64Content();//获取base64
newgetFileidArr = JSON.parse( fileidArr );

其中getContent()、getFileidArr()、getBase64Content()是方法名


完整的js代码

//班级列表模板
<script id="demo" type="text/html">
  {{#  layui.each(d, function(index, item){ }}
	<div class="selectclass">
		{{#  if(item.CLASSLOGO == ''){ }}
		<img src="/static/shared/images/yk.png" />
		{{#  }else{ }} 
		<img src="{{ item.CLASSLOGO }}" />
		{{#  } }}
		<div class="name">{{ item.CLASSNAME }}</div>
		<div class="classcheckbox" data-clsid="{{ item.CLSID }}" 
			data-num="{{ item.STUDENTNUM }}">
			<input type="checkbox" name="classlist">
		</div>
	</div>
  {{#  }); }}
  {{#  if(d.length === 0){ }}
   暂无班级
  {{#  } }} 
</script>

var listhtml = '';
var _nums = '';
var _newnums = 0;
var clsidarrnew = [];
var needNotice = '0';
var classinfo = <?php echo $classinfo; ?>;//班级列表数据
console.log(classinfo);

//班级列表模板渲染
function renderDate(selector, data) {
	var htmls = $("#demo").html();
	laytpl(htmls).render(data, function(html) {
		$(selector).html(html);
	});
};

//选择select时改变时长
form.on('select', function(data){
  	if($('input[name="switch"]').prop("checked") == true){
		msgtime = (_newnums * 3)/60;
		$('[data-role="alltime"]').html(((data.value * _newnums)/60) + msgtime);
	}else{
		$('[data-role="alltime"]').html((data.value * _newnums)/60);
	}
}); 

form.on('switch', function(data){
	var alltimes = $('[data-role="alltime"]').html();
	var msgtime = (_newnums * 3)/60;
	if(data.elem.checked){
		layer.msg('短信提醒:按每学生一条短信扣时长3分钟计费');
		needNotice = '1'; 
		var newtime = Number(alltimes) + msgtime;
		$('[data-role="alltime"]').html(newtime);
	}else{
		needNotice = '0';
		var newtime = Number(alltimes) - msgtime;
		$('[data-role="alltime"]').html(newtime);
	}
}); 


//点击班级列表时操作

$(document).on('click','.classcheckbox input',function(){
	//获取当前班级人数
	_nums = $(this).parent().attr('data-num');
	//班级id数组
	var clsidarr = [];
	//选中班级人数总和数组
	var numarr = [];
	//班级人数总和赋值
	_newnums = 0;
	
	//循环checkbox选中的id和num
	$("[name=classlist]:checkbox").each(function(i){
		//判断人数为0时的提示
		if(_nums == '0'){
			layer.alert('当前班级没有学生,请先添加学生');
			$(this).prop("checked",false);
			return;
		}else{
			if ($(this).prop("checked") == true){
				clsidarr.push($(this).parent().attr('data-clsid')); //获取值
				numarr.push($(this).parent().attr('data-num')); //获取值
				
				//计算数组内数字的总和
				_newnums = eval(numarr.join("+"));
			} 
		}
	})	
	//计算总时长,并赋值
	var _time = $('select[name="time"]').val();
	var alltime = (_newnums * _time) / 60;
	$('[data-role="alltime"]').html(alltime);
	console.log(clsidarr);
	clsidarrnew = clsidarr;
});


//index加载中遮罩层
var indexs;
//定义全局变量
var editor,fileidArr,newgetFileidArr,base64Content;

//点击创建直播按钮的操作
$('[data-role="addlive"]').click(function() {
	//调用班级列表模板
	renderDate("#view", classinfo);
	//弹出层
	layer.open({
		type: 1,
		title: '创建直播',
		btn:['创建直播'],
		yes: function(index, layero){
			indexs = layer.load(2,{shade: [0.3,'#fff']});//遮罩
			
			//判断为空时的状态
			if($('input[name="title"]').val() == ''){
				layer.alert('请输入直播标题');
				layer.close(indexs);
				return;
			}
			if($('#startTime').val() == ''){
				layer.alert('请选择直播开始时间');
				layer.close(indexs);
				return;
			}
			if($('select[name="time"]').val() == ''){
				layer.alert('请选择直播时长');
				layer.close(indexs);
				return;
			}
			if(clsidarrnew.length == 0){
				layer.alert('请选择班级');
				layer.close(indexs);
				return;
			}
			//获取总时长
			var _ti = $('[data-role="alltime"]').html();
			
			//获取编辑器内容
			editor = $("#editoriframe")[0].contentWindow.getContent();
			
			//获取编辑器中上传的图片id 为数组
			fileidArr = $("#editoriframe")[0].contentWindow.getFileidArr();
			
			//获取 base64的数据
			base64Content = $("#editoriframe")[0].contentWindow.getBase64Content();
			
			newgetFileidArr = JSON.parse( fileidArr );
			
			//点提交按钮时调用的方法
			createlive(clsidarrnew);
		},
		shade: 0.5,
		area: ['1000px', '560px'],
		scrollbar: false,
		content:$('.addlivebox')
	});
});

//提交直播
function createlive(clsidarr){
	//能获取到值
	console.log(editor);
	console.log(newgetFileidArr);
	console.log(base64Content);
	var data = {
	        'title': $('input[name="title"]').val(),
			'description': editor,
			'descfileid': newgetFileidArr,
			'clsid': clsidarr,
			'starttime': $('#startTime').val(),
			'duration': $('select[name="time"]').val(),
			'isbase64': false,
			‘needNotice‘’:needNotice
	    }
	 $.post('/shared/classlivestream/create',data,function (res) {
		 if(res.success){
			 layer.alert(res.message, function(){
			   window.location.reload();
			 });
		 }else{
			 layer.close(indexs);
			 layer.alert(res.message, function(){
			   $('input[name="title"]').val('');
			   $('#startTime').val('');
			   $('select[name="time"]').val(0);
			   $('[data-role="alltime"]').html('0');
			   form.render("select");
			 });
		 }
	 });
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JSP中的iframe标签可以用来在一个网页中嵌套另一个网页。嵌套的网页可以是一个静态的HTML页面,也可以是一个动态生成的JSP页面。 使用iframe标签嵌套页面可以实现以下功能: 1. 显示其他网站的内容:可以将其他网站的页面嵌入自己的页面中展示,例如显示一个新闻网站或社交媒体的页面。 2. 分割页面:可以将一个页面分成多个部分,并在不同的iframe中显示不同的内容。这样可以方便地实现多个模块之间的数据交互和刷新。 3. 异步加载内容:可以使用iframe标签加载异步内容,例如通过Ajax获取数据,然后将数据展示在iframe中。这样可以实现局部的页面刷新,提高用户体验。 4. 嵌套:可以将一个页面嵌套到另一个页面中,方便用户进行数据输入和提交。 在使用iframe标签时需要注意以下问题: 1. 页面兼容性:不同浏览器对iframe的支持和现可能会有差异,需要进行适当的测试和兼容性处理。 2. 安全性:在嵌套其他网站的内容时需要注意安全问题,避免恶意代码的注入和跨域访问的问题。 3. 页面性能:使用iframe标签时会增加页面的加载时间和带宽消耗,需要合理控制嵌套页面的大小和加载内容的数量。 总之,jsp中使用iframe标签可以方便地在一个页面中嵌套其他网页,实现不同的功能和交互效果。但是在使用时需要注意安全性和页面性能问题,以提供用户良好的体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值