2017-08-22 12 views
1

私は自分のプロジェクトでSlickGridを使用していますが、列の順序を変更しようとすると、Webページが縦にスクロールして列ヘッダーが見えなくなります。ユーザーが列をドラッグし始めるとき。私は以下のようにsetupColumnReorderの開始と停止の機能を変更しました。今回は、初めてユーザーが列見出しをドラッグし始めると、Webページが自動的にスクロールします。ユーザーが2回目にドラッグすると、意図したとおりに機能し、垂直スクロールは発生しません。どのように最初のドラッグ操作で垂直スクロールを防ぐには?slickgrid vertical scrolling while列の並べ替え

function setupColumnReorder() { 
 
     $headers.filter(":ui-sortable").sortable("destroy"); 
 
     $headers.sortable({ 
 
     containment: "parent", 
 
     distance: 3, 
 
     axis: "x", 
 
     cursor: "default", 
 
     tolerance: "intersection", 
 
     helper: "clone", 
 
     placeholder: "slick-sortable-placeholder ui-state-default slick-header-column", 
 
     start: function (e, ui) { 
 
/********************I added this part******************************************************/ 
 
     $("body").css("overflow", "hidden"); 
 
     $(this.parentNode).css("overflow", "hidden"); 
 
//  window.scrollTo(0, 0) ; 
 
    /********************I added this part******************************************************/ 
 
      ui.placeholder.width(ui.helper.outerWidth() - headerColumnWidthDiff); 
 
      $(ui.helper).addClass("slick-header-column-active"); 
 
     }, 
 
     beforeStop: function (e, ui) { 
 
      $(ui.helper).removeClass("slick-header-column-active"); 
 
     }, 
 
     stop: function (e) { 
 
    /********************I added this part******************************************************/ 
 
     $("body").css("overflow", "auto"); 
 
     $(this.parentNode).css("overflow", "auto"); 
 
    /********************I added this part******************************************************/

編集:私は垂直方向のスクロールが発生した例を追加しています。

<html> 
 
<head> 
 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
 
    <link rel="shortcut icon" type="image/ico" href="favicon.ico" /> 
 
    <title>SlickGrid example 2: Formatters</title> 
 
    <link rel="stylesheet" href="../slick.grid.css" type="text/css"/> 
 
    <link rel="stylesheet" href="../css/smoothness/jquery-ui-1.11.3.custom.css" type="text/css"/> 
 
    <link rel="stylesheet" href="examples.css" type="text/css"/> 
 
    <style> 
 
    .cell-title { 
 
     font-weight: bold; 
 
    } 
 

 
    .cell-effort-driven { 
 
     text-align: center; 
 
    } 
 

 
    .green { 
 
     background-color: green; 
 
    }  
 
    .red { 
 
     background-color: red; 
 
    }  
 
    .orange { 
 
     background-color: orange; 
 
    }  
 
    </style> 
 
<script src="../lib/firebugx.js"></script> 
 

 
<script src="../lib/jquery-1.11.2.min.js"></script> 
 
<script src="../lib/jquery-ui-1.11.3.min.js"></script> 
 
<script src="../lib/jquery.event.drag-2.3.0.js"></script> 
 

 
<script src="../slick.core.js"></script> 
 
<script src="../slick.formatters.js"></script> 
 
<script src="../slick.grid.js"></script> 
 
<script> 
 
    // a standard formatter returns a string 
 
    function formatter(row, cell, value, columnDef, dataContext) { 
 
     return value; 
 
    } 
 

 
    // an extended formatter returns an object { text , removeClasses, addClasses } 
 
    // the classes are removed and then added during an update, or just added on cell creation 
 
    function statusFormatter(row, cell, value, columnDef, dataContext) { 
 
     var rtn = { text: value, removeClasses: 'red orange green' }; 
 
     if (value !== null || value !== "") { 
 
     if (value < 33) { 
 
      rtn.addClasses = "red"; 
 
     } else if (value < 66) { 
 
      rtn.addClasses = "orange"; 
 
     } else { 
 
      rtn.addClasses = "green"; 
 
     } 
 
     } 
 
     return rtn; 
 
    } 
 

 
    var grid; 
 
    var data = []; 
 
    var columns = [ 
 
    {id: "title", name: "Title", field: "title", width: 120, cssClass: "cell-title", formatter: formatter}, 
 
    {id: "duration", name: "Duration", field: "duration"}, 
 
    {id: "%", name: "% Complete", field: "percentComplete", width: 80, resizable: false, formatter: Slick.Formatters.PercentCompleteBar}, 
 
    {id: "status", name: "Status", field: "percentComplete", width: 50, resizable: false, formatter: statusFormatter}, 
 
    {id: "start", name: "Start", field: "start", minWidth: 60}, 
 
    {id: "finish", name: "Finish", field: "finish", minWidth: 60}, 
 
    {id: "effort-driven", name: "Effort Driven", sortable: false, width: 80, minWidth: 20, maxWidth: 80, cssClass: "cell-effort-driven", field: "effortDriven", formatter: Slick.Formatters.Checkmark} 
 
    ]; 
 

 
    
 
    var options = { 
 
    editable: false, 
 
    enableAddRow: false, 
 
    enableCellNavigation: true 
 
    }; 
 

 
    $(function() { 
 
    for (var i = 0; i < 5; i++) { 
 
     var d = (data[i] = {}); 
 

 
     d["title"] = "<a href='#' tabindex='0'>Task</a> " + i; 
 
     d["duration"] = "5 days"; 
 
     d["percentComplete"] = Math.min(100, Math.round(Math.random() * 110)); 
 
     d["start"] = "01/01/2009"; 
 
     d["finish"] = "01/05/2009"; 
 
     d["effortDriven"] = (i % 5 == 0); 
 
    } 
 

 
    grid = new Slick.Grid("#myGrid", data, columns, options); 
 
    }) 
 
</script> 
 
</head> 
 
<body> 
 
<table width="100%"> 
 
    <tr> 
 
    <td valign="top" width="50%"> 
 
     <div id="myGrid" style="position:absolute;top:300px;width:700px;height:500px;"></div> 
 
    </td> 
 
    <td valign="top"> 
 
     <h2>Demonstrates:</h2> 
 
     <ul> 
 
     <li>width, minWidth, maxWidth, resizable, cssClass column attributes</li> 
 
     <li>custom column formatters</li> 
 
     <li>an extended formatter returning an object { text , removeClasses, addClasses } rather than a string, allowing adding and removing css classes from the cell</li> 
 
     </ul> 
 
     <h2>View Source:</h2> 
 
     <ul> 
 
      <li><A href="https://github.com/6pac/SlickGrid/blob/master/examples/example2-formatters.html" target="_sourcewindow"> View the source for this example on Github</a></li> 
 
     </ul> 
 
    </td> 
 
    </tr> 
 
</table> 
 
</body> 
 
</html>

編集:問題は、MozillaのFirefoxに関連しているようです。上記のコードをGoogle Chromeでテストしたところ、垂直スクロールは発生しません。

+0

修正するコードは、画像ではなくコードスニペットとして送信する必要があります。 – mdziekon

+0

コードスニペットを追加しました。 – mkask

答えて

0

基本的な例のバグを複製しましたか?
カラムをドラッグすることができますhttp://6pac.github.io/SlickGrid/examples/example2-formatters.html
問題が発生していますか?

私は問題がないので、使用しているブラウザとOSを指定してください。

+0

質問に垂直スクロールが発生するという例を追加しました。私はUbuntu 16.04とMozilla Firefoxを使用しています。 – mkask

+0

私は問題がMozilla Firefoxに関連していると思います。私はGoogle Chromeで同じコードをテストし、垂直スクロールは起こりません。 – mkask

+0

FirefoxにはGitHub Issuesにも別の問題があります。残念ながら私はこれらのブラウザ固有のウサギの穴を下ろす時間はありません。 Slickgridはブラウザの違いから守るためにjQueryとjQueryUIにかなり依存しているので、実際はFirefoxのバグかもしれません。あなたがそれを追跡するなら、私は修正をプッシュすることをうれしく思います。おかげさまで –

関連する問題