jquery插件splitScren实现页面分屏切换模板特效


Posted in Javascript onJune 16, 2015

闲来无事,搞了个页面的分屏效果,先来看下效果:

出于可自定义宽高的目的,屏幕分块由CSS控制,由js控制估计等分模块效果一般.

jquery插件splitScren实现页面分屏切换模板特效

程序相关说明:

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;
  }
};

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
JavaScript前补零操作实例
Mar 11 Javascript
JS中用try catch对代码运行的性能影响分析
Dec 26 Javascript
bootstrap table配置参数例子
Jan 05 Javascript
JavaScript实现事件的中断传播和行为阻止方法示例
Jan 20 Javascript
HTML5实现微信拍摄上传照片功能
Apr 21 Javascript
分析JS单线程异步io回调的特性
Dec 01 Javascript
Vue 自定义指令功能完整实例
Sep 17 Javascript
微信小程序swiper左右扩展各显示一半代码实例
Dec 05 Javascript
JavaScript中的this基本问题实例小结
Mar 09 Javascript
Vue实现仿iPhone悬浮球的示例代码
Mar 13 Javascript
JavaScript仿京东秒杀倒计时
Mar 17 Javascript
javascript操作向表格中动态加载数据
Aug 27 Javascript
简述JavaScript对传统文档对象模型的支持
Jun 16 #Javascript
纯javascript实现四方向文本无缝滚动效果
Jun 16 #Javascript
Bootstrap基础学习
Jun 16 #Javascript
简述JavaScript的正则表达式中test()方法的使用
Jun 16 #Javascript
常用DOM整理
Jun 16 #Javascript
AngularJS学习笔记之ng-options指令
Jun 16 #Javascript
在JavaScript的正则表达式中使用exec()方法
Jun 16 #Javascript
You might like
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
2010/06/11 PHP
php调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
PHP判断远程图片是否存在的几种方法
2014/05/04 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
2016/10/29 PHP
php7下的filesize函数
2019/09/30 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
兼容IE和FF的js脚本代码小结(比较常用)
2010/12/06 Javascript
ASP.NET jQuery 实例12 通过使用jQuery validation插件简单实现用户注册页面验证功能
2012/02/03 Javascript
定时器(setTimeout/setInterval)调用带参函数失效解决方法
2013/03/26 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
javascript常用功能汇总
2015/07/05 Javascript
node.js抓取并分析网页内容有无特殊内容的js文件
2015/11/17 Javascript
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
2018/07/27 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
解决webpack dev-server不能匹配post请求的问题
2018/08/24 Javascript
vue使用Font Awesome的方法步骤
2019/02/26 Javascript
javascript操作元素的常见方法小结
2019/11/13 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
浅谈Python中函数的参数传递
2016/06/21 Python
selenium+python自动化测试之鼠标和键盘事件
2019/01/23 Python
用python实现刷点击率的示例代码
2019/02/21 Python
pytorch打印网络结构的实例
2019/08/19 Python
Python 解析xml文件的示例
2020/09/29 Python
Python爬虫模拟登陆哔哩哔哩(bilibili)并突破点选验证码功能
2020/12/21 Python
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
2020/07/20 HTML / CSS
YSL圣罗兰美妆美国官网:Yves Saint Lauret US
2016/11/21 全球购物
理工大学毕业生自荐信
2013/11/01 职场文书
铁路安全事故反思
2014/04/26 职场文书
市场部岗位职责
2015/02/12 职场文书
2015年度销售个人工作总结
2015/03/31 职场文书
2016年八一建军节活动总结
2016/04/05 职场文书
Pytorch中Softmax与LogSigmoid的对比分析
2021/06/05 Python
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python