• 技术文章 >后端开发 >php教程

    javascript - Yii2 表格缩放列宽,页面刷新后保持不变怎么实现?

    2016-12-01 00:56:59原创718

    1、Yii2 DynaGrid插件生成的列表可以手动拖动每一列的宽度,但是拖动之后怎么保存?使刷新页面后还是刚才拖动停止的宽度。

    主要代码如下:(由rc-table-resizing与rc-column-resizing这两class控制)

    注释:以下是源码,不能改动,要重写。

     ResizableColumns.prototype.pointerdown = function(e) {
          var $currentGrip, $leftColumn, $ownerDocument, $rightColumn, newWidths, startPosition, widths;
          e.preventDefault();
          $ownerDocument = $(e.currentTarget.ownerDocument);
          startPosition = pointerX(e);
          $currentGrip = $(e.currentTarget);
          $leftColumn = $currentGrip.data('th');
          $rightColumn = this.$tableHeaders.eq(this.$tableHeaders.index($leftColumn) + 1);
          widths = {
            left: parseWidth($leftColumn[0]),
            right: parseWidth($rightColumn[0])
          };
          newWidths = {
            left: widths.left,
            right: widths.right
          };
          this.$handleContainer.add(this.$table).addClass('rc-table-resizing');
          $leftColumn.add($rightColumn).add($currentGrip).addClass('rc-column-resizing');
          this.triggerEvent('column:resize:start', [$leftColumn, $rightColumn, newWidths.left, newWidths.right], e);
          $ownerDocument.on('mousemove.rc touchmove.rc', (function(_this) {
            return function(e) {
              var difference;
              difference = (pointerX(e) - startPosition) / _this.$table.width() * 100;
              setWidth($leftColumn[0], newWidths.left = _this.constrainWidth(widths.left + difference));
              setWidth($rightColumn[0], newWidths.right = _this.constrainWidth(widths.right - difference));
              if (_this.options.syncHandlers != null) {
                _this.syncHandleWidths();
              }
              return _this.triggerEvent('column:resize', [$leftColumn, $rightColumn, newWidths.left, newWidths.right], e);
            };
          })(this));
          return $ownerDocument.one('mouseup touchend', (function(_this) {
            return function() {
              $ownerDocument.off('mousemove.rc touchmove.rc');
              _this.$handleContainer.add(_this.$table).removeClass('rc-table-resizing');
              $leftColumn.add($rightColumn).add($currentGrip).removeClass('rc-column-resizing');
              _this.syncHandleWidths();
              _this.saveColumnWidths();
              return _this.triggerEvent('column:resize:stop', [$leftColumn, $rightColumn, newWidths.left, newWidths.right], e);
            };
          })(this));
        };
    
        return ResizableColumns;
    
      })();

    回复内容:

    1、Yii2 DynaGrid插件生成的列表可以手动拖动每一列的宽度,但是拖动之后怎么保存?使刷新页面后还是刚才拖动停止的宽度。

    主要代码如下:(由rc-table-resizing与rc-column-resizing这两class控制)

    注释:以下是源码,不能改动,要重写。

     ResizableColumns.prototype.pointerdown = function(e) {
          var $currentGrip, $leftColumn, $ownerDocument, $rightColumn, newWidths, startPosition, widths;
          e.preventDefault();
          $ownerDocument = $(e.currentTarget.ownerDocument);
          startPosition = pointerX(e);
          $currentGrip = $(e.currentTarget);
          $leftColumn = $currentGrip.data('th');
          $rightColumn = this.$tableHeaders.eq(this.$tableHeaders.index($leftColumn) + 1);
          widths = {
            left: parseWidth($leftColumn[0]),
            right: parseWidth($rightColumn[0])
          };
          newWidths = {
            left: widths.left,
            right: widths.right
          };
          this.$handleContainer.add(this.$table).addClass('rc-table-resizing');
          $leftColumn.add($rightColumn).add($currentGrip).addClass('rc-column-resizing');
          this.triggerEvent('column:resize:start', [$leftColumn, $rightColumn, newWidths.left, newWidths.right], e);
          $ownerDocument.on('mousemove.rc touchmove.rc', (function(_this) {
            return function(e) {
              var difference;
              difference = (pointerX(e) - startPosition) / _this.$table.width() * 100;
              setWidth($leftColumn[0], newWidths.left = _this.constrainWidth(widths.left + difference));
              setWidth($rightColumn[0], newWidths.right = _this.constrainWidth(widths.right - difference));
              if (_this.options.syncHandlers != null) {
                _this.syncHandleWidths();
              }
              return _this.triggerEvent('column:resize', [$leftColumn, $rightColumn, newWidths.left, newWidths.right], e);
            };
          })(this));
          return $ownerDocument.one('mouseup touchend', (function(_this) {
            return function() {
              $ownerDocument.off('mousemove.rc touchmove.rc');
              _this.$handleContainer.add(_this.$table).removeClass('rc-table-resizing');
              $leftColumn.add($rightColumn).add($currentGrip).removeClass('rc-column-resizing');
              _this.syncHandleWidths();
              _this.saveColumnWidths();
              return _this.triggerEvent('column:resize:stop', [$leftColumn, $rightColumn, newWidths.left, newWidths.right], e);
            };
          })(this));
        };
    
        return ResizableColumns;
    
      })();

    这是css控制的,你可以设置一个session,保存下你的列表的宽度,刷新的时候,就可以用js赋值给css就可以了。

    楼上说的没错呢

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:asp.net php yii2 java javascript
    上一篇:javascript - 微信定位获取城市名称显示页面上 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • PHP+Socket系列之IO多路复用及实现web服务器• PHP+Socket系列之实现客户端与服务端数据传输• PHP socket学习:带你做个简单的socket服务器• 一文详解PHP用流方式实现下载文件(附代码示例)• PHP原生类的总结分享
    1/1

    PHP中文网