闲来无事,搞了个页面的分屏效果,先来看下效果:
出于可自定义宽高的目的,屏幕分块由CSS控制,由js控制估计等分模块效果一般.
程序相关说明:
HTML结构:
<div class=\"header\"> header </div> <div class=\"container\" id=\"displayArea\"> <!-- 分屏内容渲染区域 --> </div> <div class=\"footer\"> <!--省略其他代码--> </div>
js调用:
//分屏数据 var iframes = [ { id:\'frames_1\', frameName:\'百度一下\', src:\'http://www.baidu.com\' }, { id:\'frames_1\', frameName:\'百度地图\', src:\'http://map.baidu.com\' }, { id:\'frames_1\', frameName:\'百度下\', src:\'http://www.baidu.com\' }, { id:\'frames_1\', frameName:\'百度视频\', src:\'http://v.baidu.com\' }, { id:\'frames_1\', frameName:\'百度新闻2\', src:\'http://news.baidu.com\' }, { id:\'frames_1\', frameName:\'test6\', src:\'6.html\' }, { id:\'frames_1\', frameName:\'百度新闻\', src:\'http://news.baidu.com\' }, { id:\'frames_1\', frameName:\'88888\', src:\'6.html\' }, { id:\'frames_1\', frameName:\'百度更多\', src:\'http://www.baidu.com/more/\' } ]; //自适应屏幕 window.onload = function(){ Panel.resize(); } window.onresize = function(){ Panel.resize(); } //初始化分屏 var splitScreen = new splitScreen($(\'#displayArea\'),iframes); //监听removeSettingCls自定义事件 splitScreen._on(\'removeSettingCls\',function(){ splitScreen.toggleTopbar(function(){ $(\'.ulTab li[data-fp=\"setting\"]\').removeClass(\'currentLi\'); }); }); //分屏切换 function changeModel(obj){ var fpmodel = $(obj).attr(\'data-fp\'); if(fpmodel !=\"setting\"){ splitScreen.screenMode(fpmodel,function(){ $(obj).addClass(\'currentLi\').siblings().removeClass(\'currentLi\'); }); }else{ splitScreen.toggleTopbar(function(){ $(obj).toggleClass(\'currentLi\'); }); } }
splitScreen.js相关代码说明:
1.定义一个类
var splitScreen = function(elem, options) { this.elem = elem; //分屏模块渲染区域元素 this.options = options;//分屏链接数据 this.initialize.apply(this); //初始化初始化分屏 }
2.prototype主要方法
splitScreen.prototype= { initialize: function() {},//初始化方法 screenMode: function(){},//分屏方法 renderPanel:function(){},//渲染分屏DOM bindPanel:function(){} //事件监听 };
3.screenMode()方法说明:
主要是根据不同的分屏切换不同的Class,通过CSS类去控制分屏布局.这样写的好处应该是可以自定义布局的宽高大小,但是比较繁琐。如下:
switch (Number(mode)) { case 1: this.data = [ [\'fp-1-1\'] ]; this.defaultShow = [0]; break; case 2: this.data = [ [\'fp-2-1\'], [\'fp-2-2\'] ]; this.defaultShow = [1, 2]; break; case 3: this.data = [ [\'fp-3-1\'], [\'fp-3-2\', \'fp-3-3\'] ]; this.defaultShow = [1, 2, 3]; break; case 4: this.data = [ [\'fp-4-1\', \'fp-4-2\'], [\'fp-4-3\', \'fp-4-4\'] ]; this.defaultShow = [4, 1, 2, 3]; break; case 5: this.data = [ [\'fp-5-1\'], [\'fp-5-2\'], [\'fp-5-3\', \'fp-5-4\', \'fp-5-5\'] ]; this.defaultShow = [4, 5, 1, 2, 3]; break; case 6: this.data = [ [\'fp-6-1\'], [\'fp-6-2\', \'fp-6-3\'], [\'fp-6-4\', \'fp-6-5\', \'fp-6-6\'] ]; this.defaultShow = [4, 5, 6, 7, 8, 8]; break; default: alert(\"不支持\" + mode + \"分屏\"); }
CSS布局控制:
.fp-box{position:absolute;border:1px solid #000;background:#fff;} .fp-1-1{top:0;left:0;right: 0;bottom: 0;} .fp-2-1{top:0;left:0;right: 300px;bottom: 0;} .fp-2-2{top:0;right: 0px;bottom: 0; width: 300px;} .fp-3-1{top:0;left:0;right: 300px;bottom: 0;} .fp-3-2{top:0;right: 0;width:300px;height:50%;} .fp-3-3{top:50%;right: 0;bottom: 0;width:300px;} .fp-4-1{top:0;left:0;right: 50%;height:50%;} .fp-4-2{top:50%;left:0;right: 50%;bottom: 0;} .fp-4-3{top:0;right: 0;width:50%;height:50%;} .fp-4-4{top:50%;right: 0;bottom: 0;width:50%;} .fp-5-1{top:0;left:0;right: 300px;bottom: 252px;} .fp-5-2{top:0px;width:300px;right: 0;bottom: 252px;} .fp-5-3{height: 250px;left:0;width:30%;bottom: 0;} .fp-5-4{height: 250px;left:30%;width:30%;bottom: 0;} .fp-5-5{height: 250px;left:60%;bottom: 0;right: 0;} .fp-6-1{top:0;left:0;right: 300px;bottom: 252px;} .fp-6-2{top:0;width:300px;right: 0;height:250px;} .fp-6-3{top:250px;width:300px;right: 0;bottom: 252px;} .fp-6-4{height: 250px;left:0;width:30%;bottom: 0;} .fp-6-5{height: 250px;left:30%;width:30%;bottom: 0;} .fp-6-6{height: 250px;left:60%;bottom: 0;right: 0;}
完整代码:
HTML:
<!DOCTYPE html> <html lang=\"en\"> <head> <meta charset=\"UTF-8\"> <title>fp version2</title> <style type=\"text/css\"> *{margin:0;padding:0;} .header{background:#ddd;height:120px;} .footerCon{width:320px;margin: 0 auto;} .footerCon .dropDiv{background: #fff; margin: 10px 0 0 0; float: left;} .footerCon .fpmodel{display: none;float: right;width:160px;} .footerCon .saveBtn{margin: 10px 0 0 10px; padding: 2px 10px;border:1px solid #CCC;cursor: pointer;} .clearFix:after{content:\'\';display:block;height:0;overflow:hidden;clear:both;} .footer { height: 40px; background: #ABABAB; position: fixed; bottom: 0px; width: 100%; } .footer .ulTab {list-style-type: none;width:200px;overflow: hidden;float: left;} .footer .ulTab li{float: left;height:16px;padding: 12px 15px;cursor: pointer;} .footer .ulTab li.currentLi{background: #fff;} .tabImg{width:18px;height: 14px;border:1px solid #707070;background:#fff;} .tabImg td{width: 9px;height: 5px;border:1px solid #707070;} .divImg{border-width:2px;height: 12px;} .td3Img td{height: 3px;} .currentLi .tabImg,.currentLi .tabImg td{border-color:#1e7be4;} .topbarDiv{position: absolute;left: 0;top:0;right:0;border:1px solid #dedede;z-index: 1;height:25px;padding:3px;background: #61C0FA;display: none;} .changeBtn{cursor:pointer; padding: 2px 10px;float: left;} .dropDiv,.footer .dropDiv{position: relative;width: 100px;z-index: 100;} .dropDiv .curSrc,.footer .dropDiv .curSrc{display: inline-block;height: 20px;line-height: 20px;padding: 0 2px;} .dropDiv ul,.footer .dropDiv ul{position: absolute;left: -1px;top:20px;background: #fff;width:100px;border:1px solid #1E7BE4;display: none;} .dropDiv ul li,.footer .dropDiv ul li{line-height: 20px;padding: 0 2px;} .dropDiv ul li.currentSrc,.footer .dropDiv ul li.currentSrc{background: #1E7BE4;color: #fff;cursor: pointer;} .dropDiv ul li:hover,.footer .dropDiv ul li:hover{background:#AEC9F3;color: #fff;cursor: pointer;} .optionsWrap{float: right;} .optionsWrap a{font-family: \'MicroSoft YaHei\';color:#fff;text-decoration:none;float: left;} .optionsWrap a:hover{color: #fdd;cursor:pointer;} .btnBig{width: 50px;height:30px;text-align: center;} .btnSmall{width: 50px;height:30px;text-align: center;} .btnCls{width: 50px;height:30px;text-align: center;} /*分屏模块布局*/ .container{position: relative;} .fp-box{position:absolute;border:1px solid #000;background:#fff;} .fp-1-1{top:0;left:0;right: 0;bottom: 0;} .fp-2-1{top:0;left:0;right: 300px;bottom: 0;} .fp-2-2{top:0;right: 0px;bottom: 0; width: 300px;} .fp-3-1{top:0;left:0;right: 300px;bottom: 0;} .fp-3-2{top:0;right: 0;width:300px;height:50%;} .fp-3-3{top:50%;right: 0;bottom: 0;width:300px;} .fp-4-1{top:0;left:0;right: 50%;height:50%;} .fp-4-2{top:50%;left:0;right: 50%;bottom: 0;} .fp-4-3{top:0;right: 0;width:50%;height:50%;} .fp-4-4{top:50%;right: 0;bottom: 0;width:50%;} .fp-5-1{top:0;left:0;right: 300px;bottom: 252px;} .fp-5-2{top:0px;width:300px;right: 0;bottom: 252px;} .fp-5-3{height: 250px;left:0;width:30%;bottom: 0;} .fp-5-4{height: 250px;left:30%;width:30%;bottom: 0;} .fp-5-5{height: 250px;left:60%;bottom: 0;right: 0;} .fp-6-1{top:0;left:0;right: 300px;bottom: 252px;} .fp-6-2{top:0;width:300px;right: 0;height:250px;} .fp-6-3{top:250px;width:300px;right: 0;bottom: 252px;} .fp-6-4{height: 250px;left:0;width:30%;bottom: 0;} .fp-6-5{height: 250px;left:30%;width:30%;bottom: 0;} .fp-6-6{height: 250px;left:60%;bottom: 0;right: 0;} </style> </head> <body> <div class=\"header\"> header </div> <div class=\"container\" id=\"displayArea\"> <!-- 分屏内容区 --> </div> <div class=\"footer\"> <div class=\"footerCon clearFix\"> <ul class=\"ulTab\"> <li class=\"currentLi\" data-fp =\"1\" onclick=\"changeModel(this)\"> <div class=\"tabImg divImg\"></div> </li> <li data-fp =\"3\" onclick=\"changeModel(this)\"> <table class=\"tabImg\" cellpadding=\"0\" cellspacing=\"0\"> <tr> <td rowspan=\"2\"></td> <td></td> </tr> <tr> <td></td> </tr> </table> </li> <li data-fp =\"6\" onclick=\"changeModel(this)\"> <table class=\"tabImg td3Img\" cellpadding=\"0\" cellspacing=\"0\"> <tr> <td rowspan=\"2\" colspan=\"2\"></td> <td></td> </tr> <tr> <td></td> </tr> <tr> <td></td> <td></td> <td></td> </tr> </table> </li> <li data-fp =\"setting\" onclick=\"changeModel(this)\" title=\"设置\"> <table class=\"tabImg td3Img\" cellpadding=\"0\" cellspacing=\"0\"> <tr> <td rowspan=\"2\" colspan=\"2\"></td> <td></td> </tr> <tr> <td></td> </tr> <tr> <td></td> </tr> </table> </li> </ul> </div> </div> <script type=\"text/javascript\" src=\"js/jquery-1.7.2.min.js\"></script> <script type=\"text/javascript\" src=\"js/splitScreen.js\"></script> <script type=\"text/javascript\"> //分屏数据 var iframes = [ { id:\'frames_1\', frameName:\'百度一下\', src:\'http://www.baidu.com\' }, { id:\'frames_1\', frameName:\'百度地图\', src:\'http://map.baidu.com\' }, { id:\'frames_1\', frameName:\'百度下\', src:\'http://www.baidu.com\' }, { id:\'frames_1\', frameName:\'百度视频\', src:\'http://v.baidu.com\' }, { id:\'frames_1\', frameName:\'百度新闻2\', src:\'http://news.baidu.com\' }, { id:\'frames_1\', frameName:\'test6\', src:\'6.html\' }, { id:\'frames_1\', frameName:\'百度新闻\', src:\'http://news.baidu.com\' }, { id:\'frames_1\', frameName:\'88888\', src:\'6.html\' }, { id:\'frames_1\', frameName:\'百度更多\', src:\'http://www.baidu.com/more/\' } ]; window.onload = function(){ Panel.resize(); } window.onresize = function(){ Panel.resize(); } //初始化分屏 var splitScreen = new splitScreen($(\'#displayArea\'),iframes); //监听removeSettingCls自定义事件 splitScreen._on(\'removeSettingCls\',function(){ splitScreen.toggleTopbar(function(){ $(\'.ulTab li[data-fp=\"setting\"]\').removeClass(\'currentLi\'); }); }); //分屏切换 function changeModel(obj){ var fpmodel = $(obj).attr(\'data-fp\'); if(fpmodel !=\"setting\"){ splitScreen.screenMode(fpmodel,function(){ $(obj).addClass(\'currentLi\').siblings().removeClass(\'currentLi\'); }); }else{ splitScreen.toggleTopbar(function(){ $(obj).toggleClass(\'currentLi\'); }); } } </script> </body> </html>
JS:
/** * splitScren.js * v1.2 * 2015-5-14 * by linxia **/ var splitScreen = function(elem, options) { this.elem = elem; this.options = options; this.initialize.apply(this); } splitScreen.prototype = { initialize: function() { this.handlers = {}; this.screenMode(1); }, screenMode: function(mode, callback) { this.elem.empty(); this.data = null; this.defaultShow = null; //默认展示页面的索引 switch (Number(mode)) { case 1: this.data = [ [\'fp-1-1\'] ]; this.defaultShow = [0]; break; case 2: this.data = [ [\'fp-2-1\'], [\'fp-2-2\'] ]; this.defaultShow = [1, 2]; break; case 3: this.data = [ [\'fp-3-1\'], [\'fp-3-2\', \'fp-3-3\'] ]; this.defaultShow = [1, 2, 3]; break; case 4: this.data = [ [\'fp-4-1\', \'fp-4-2\'], [\'fp-4-3\', \'fp-4-4\'] ]; this.defaultShow = [4, 1, 2, 3]; break; case 5: this.data = [ [\'fp-5-1\'], [\'fp-5-2\'], [\'fp-5-3\', \'fp-5-4\', \'fp-5-5\'] ]; this.defaultShow = [4, 5, 1, 2, 3]; break; case 6: this.data = [ [\'fp-6-1\'], [\'fp-6-2\', \'fp-6-3\'], [\'fp-6-4\', \'fp-6-5\', \'fp-6-6\'] ]; this.defaultShow = [4, 5, 6, 7, 8, 8]; break; default: alert(\"不支持\" + mode + \"分屏\"); } if (this.data != null) { this.renderPanel(); this.bindPanel(); } callback && callback(); }, //渲染DOM结构 renderPanel: function() { var that = this; var options = this.options; var htmlstr = \'\'; for (var item = 0; item < options.length; item++) { htmlstr += \'<option value=\"\' + options[item].src + \'\" label = \"\' + options[item].frameName + \'\">\' + options[item].frameName + \'</option>\'; } for (var i = 0; i < this.data.length; i++) { var moduleDiv = $(\'<div></div>\').addClass(\'fp-module-\' + i + \'\'); for (var j = 0; j < this.data[i].length; j++) { var fpDiv = $(\'<div>\').addClass(this.data[i][j]).addClass(\'fp-box\'); var topbarDiv = $(\'<div class=\"topbarDiv\" style=\"display: none;\">\' + \'<span class=\"optionsWrap\">\' + \'<a class=\"btnBig\" title=\"放大\" href=\"javascript:void(0);\">放大</a><a class=\"btnSmall\" title=\"缩小\" href=\"javascript:void(0);\" style=\"display:none;\">缩小</a> <a href=\"javascript:void(0);\" class=\"btnCls\" title=\"关闭\"style=\"display:none;\">关闭</a>\' + \'</span>\' + \'<div class=\"dropDiv\">\' + \'<select class=\"fp-select\"><option value=\"-1\">请选择</option>\' + htmlstr + \'</select>\' + \'</div>\' + \'</div>\'); var iframe = $(\'<iframe width=\"100%\" height=\"100%\" frameBorder=\"0\" scrolling = \"auto\"></iframe>\'); if (i == 0) { fpDiv.attr(\'zp\', \'zp\'); } fpDiv.append(topbarDiv); fpDiv.append(iframe); moduleDiv.append(fpDiv); this.elem.append(moduleDiv); } } // render iframe this.elem.find(\'iframe\').each(function(i) { if (options[i][\'src\']) { var frameSrc = options[that.defaultShow[i]][\'src\']; var frameName = options[that.defaultShow[i]][\'frameName\']; var curtopbar = $(this).siblings(\'.topbarDiv\'); that.loadIframe($(this), frameSrc, frameName); curtopbar.find(\'option\').each(function() { if ($(this).attr(\'label\') == frameName) { $(this).attr(\'selected\', \'selected\'); } }); } }); }, bindPanel: function() { var that = this; // add select Event this.elem.on(\'change\', \'.fp-select\', function() { var value = $(this).find(\'option:selected\').val(); var label = $(this).find(\'option:selected\').attr(\'label\'); var iframe = $(this).closest(\'.fp-box\').find(\'iframe\'); if (value != \"-1\") { that.loadIframe(iframe, value, label); } }); // btnbig Event this.elem.on(\'click\', \'.btnBig\', function() { var obj = Panel.getSize(); var btnSmall = $(this).siblings(\'.btnSmall\'); var btnCls = $(this).siblings(\'.btnCls\'); var fpbox = $(this).closest(\'.fp-box\'); fpbox.css({ \'zIndex\': 999 }).stop().animate({ \'top\': 0, \'left\': 0, \'width\': obj.w - 2, \'height\': obj.h, \'right\': 0, \'bottom\': 0 }, 300).attr(\'scaleMode\', \'large\'); that.elem.find(\'.fp-box:not([scaleMode=\"large\"])\').hide(); $(this).hide(); $(\'html,body\').css({ \'overflow\': \'hidden\' }); btnSmall.show(); //btnCls.show(); }); // btnsmall Event this.elem.on(\'click\', \'.btnSmall\', function() { var btnBig = $(this).siblings(\'.btnBig\'); var fpbox = $(this).closest(\'.fp-box\'); var btnCls = $(this).siblings(\'.btnCls\'); fpbox.removeAttr(\'style\').removeAttr(\'scaleMode\'); $(this).hide(); that.elem.find(\'.fp-box\').show(); $(\'html,body\').css({ \'overflow\': \'visible\' }); btnCls.hide(); btnBig.show(); }); // btncls Event this.elem.on(\'click\', \'.btnCls\', function() { var fpbox = $(this).closest(\'.fp-box\'); fpbox.remove(); that.elem.find(\'.fp-box\').show(); that.fire(\'removeSettingCls\'); }); }, toggleTopbar: function(callback) { if (this.elem.find(\'.topbarDiv:visible\').length > 0) { this.elem.find(\'.topbarDiv\').hide(); } else { this.elem.find(\'.topbarDiv\').show(); } callback && callback(); }, loadIframe: function(iframe, src, framename) { $(iframe).attr(\'src\', src); $(iframe).attr(\'framename\', framename); }, _on: function(type, handler) { if (typeof this.handlers[type] == \"undefined\") { this.handlers[type] = []; } this.handlers[type].push(handler); return this; }, fire: function(type, data) { if (this.handlers[type] instanceof Array) { var handlers = this.handlers[type]; for (var i = 0, len = handlers.length; i < len; i++) { handlers[i](data); } } } }; var Panel = { config: { header: $(\'.header\'), container: $(\'.container\'), footer: $(\'.footer\'), win: $(window) }, resize: function() { var topH = Panel.config.header.height(); var botH = Panel.config.footer.height(); var mainH = Panel.config.win.height() - topH - botH; mainH = mainH < 0 ? 100 : mainH; Panel.config.container.height(mainH); if ($(\'.fp-box[scaleMode=\"large\"]\').length > 0) { $(\'.fp-box[scaleMode=\"large\"]\').css({ \'width\': Panel.config.win.width() - 2, \'height\': mainH }); } }, getSize: function() { var obj = { w: Panel.config.container.width(), h: Panel.config.container.height() }; return obj; } };
以上所述就是本文的全部内容了,希望大家能够喜欢。
本文地址:https://www.stayed.cn/item/10162
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我