【问题标题】:how to make table rows slide fade in/fade out continuously如何使表格行滑动淡入/淡出连续
【发布时间】:2019-04-28 20:50:03
【问题描述】:

我有一个有 6 行(或数据)的表,我想首先加载显示 2 行数据然后淡出并再次显示下一行 2 行并再次淡出然后每 (n) 秒连续再次显示下一行 2 行

这是表格的代码

<table border>
<thead>
    <tr>
        <th>naslov1</th>
        <th>naslov2</th>
        <th>naslov3</th>
    </tr>
</thead>
<tbody id="tableslide">
    <tr>
        <td>test_@0</td>
        <td>test_@0</td>
        <td>test_@0</td>
    </tr>
    <tr>
        <td>test_@1</td>
        <td>test_@1</td>
        <td>test_@1</td>
    </tr>
    <tr>
        <td>test_@2</td>
        <td>test_@2</td>
        <td>test_@2</td>
    </tr>
    <tr>
        <td>test_@3</td>
        <td>test_@3</td>
        <td>test_@3</td>
    </tr>
    <tr>
        <td>test_@4</td>
        <td>test_@4</td>
        <td>test_@4</td>
    </tr>
    <tr>
        <td>test_@5</td>
        <td>test_@5</td>
        <td>test_@5</td>
    </tr></tbody>

我在这个小提琴 http://jsfiddle.net/gtd4f5ny/28/ 上试过,但它只是滑动 2 次,我想每 (n) 秒每 2 行让它滑动 3 次。 请帮助各位。谢谢

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 你自己尝试过什么来创建这个?请记住,StackOverflow 不是编码服务
  • 我在这个小提琴jsfiddle.net/gtd4f5ny/28 中尝试过,但它只是滑动 2 次,但我希望每 N 秒每 2 行滑动 3 次。怎么样?
  • 这是对您的帮助jsfiddle.net/gtd4f5ny/29 .. 这是您想要的 1 行,现在您应该可以将其更改为 2 行。
  • “我想每(n)秒每 2 行 3 次”不是很清楚。你能再描述一下吗..

标签: javascript jquery html html-table slide


【解决方案1】:

看看这个:

$(function () {
	var $tableslide = $("#tableslide");
  var rows = $("#tableslide").children().length;
  var iterCount = 0;
  var lastPairSel = null;
  $("#tableslide").children().hide();

	setInterval(function () {
  	var start = iterCount*2 % rows;
    var next = (iterCount*2 + 1) % rows;
    var startSel = 'tr:nth-child(' + (start+1) + ')';
    var nextSel = 'tr:nth-child(' + (next+1) + ')';
    var pairSel = startSel + ',' + nextSel;
    console.log(pairSel);
    

$tableslide.children( lastPairSel ).fadeOut().promise().then(function () {
			$tableslide.children( pairSel ).fadeIn();
          lastPairSel = pairSel;

		});
  	
    iterCount++;
    
    
	}, 3000);  
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table border>
    <thead>
        <tr>
            <th>naslov1</th>
            <th>naslov2</th>
            <th>naslov3</th>
        </tr>
    </thead>
    <tbody id="tableslide">
        <tr>
            <td>test_@0</td>
            <td>test_@0</td>
            <td>test_@0</td>
        </tr>
        <tr>
            <td>test_@1</td>
            <td>test_@1</td>
            <td>test_@1</td>
        </tr>
        <tr>
            <td>test_@2</td>
            <td>test_@2</td>
            <td>test_@2</td>
        </tr>
        <tr>
            <td>test_@3</td>
            <td>test_@3</td>
            <td>test_@3</td>
        </tr>
        <tr>
            <td>test_@4</td>
            <td>test_@4</td>
            <td>test_@4</td>
        </tr>
        <tr>
            <td>test_@5</td>
            <td>test_@5</td>
            <td>test_@5</td>
        </tr>
        <tr>
            <td>test_@6</td>
            <td>test_@6</td>
            <td>test_@6</td>
        </tr>
        </tbody>
</table>

编辑:

更改此项可修复 [0,6] 问题:

var start = iterCount*2 % rows;
var next = start+1; //If next is unavailable index, it will be ignored

如果“一次 n 个”是动态的:

    $(function () {
        var $tableslide = $("#tableslide");
        var rows = $("#tableslide").children().length;
        var start = 0;
        var lastPairSel = null;
        $("#tableslide").children().hide();

        setInterval(function () {
            var n = 4;
            var pairSel = '';
            for(var i=0; i<n; i++){
                if(start+i > rows) break; //Optional. To skip unwanted selectors
                if(i>0) pairSel+=',';
                pairSel += 'tr:nth-child(' + (start+i+1) + ')'
            }
            console.log(pairSel);

            $tableslide.children( lastPairSel ).fadeOut().promise().then(function () {
                $tableslide.children( pairSel ).fadeIn();
                lastPairSel = pairSel;
            });

            start = (start + n);
            if(start>rows) start = 0;
        }, 3000);  
    });

【讨论】:

  • 非常感谢您节省了我的时间,如果我想将其更改为 [0,1,2] 等等,只需一个问题。怎么样?
  • 如果一次只有 3 个,则再添加一个变量。如果它是动态的,则使用内部循环来构造 pairSel
  • 使用动态选项更新
  • 希望它能解决您的问题...如果有,请接受答案。 ;)
【解决方案2】:

您必须使用 Javascript 来执行此操作并将数据移动到 Javascript。最简单的方法是创建 DOM 节点并在时间间隔后将其添加到 tbody。

  1. 将所有数据移至 JavaScript 变量。
  2. 创建函数将单行添加到正文
  3. 在 setInterval 中添加行

const data = [
  ["testa1", "testa2", "testa3"],
  ["testb1", "testb2", "testb3"],
  ["testc1", "testc2", "testc3"],
  ["testd1", "testd2", "testd3"],
  ["teste1", "teste2", "teste3"],
  ["testf1", "testf2", "testf3"]
];

function addRow(tbody, data) {
  const row = document.createElement("tr");
  for (var i = 0; i < data.length; i++) {
    const td = document.createElement("td");
    td.textContent = data[i];
    row.appendChild(td);
  }
  tbody.appendChild(row);
}
function cleartData(elem){
  while (elem.firstChild) {
    elem.removeChild(elem.firstChild);
}
}
const tbody = document.querySelector("#tableslide");
let counter = 0;
setInterval(() => {
  cleartData(tbody);
  addRow(tbody, data[counter]);
  addRow(tbody, data[counter + 1]);
  counter = (counter + 2) % data.length;
}, 2000);
<table border >
<thead>
    <tr>
        <th>naslov1</th>
        <th>naslov2</th>
        <th>naslov3</th>
    </tr>
</thead>
<tbody id="tableslide">
   </tbody>
</table>

这里是参考代码

https://codepen.io/akmittal/pen/bQjQgP

【讨论】:

  • 您可以在不将数据移动到 javascript 的情况下使其变得简单吗?对不起,因为这对我来说很难,我对此很陌生
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 2019-07-22
  • 1970-01-01
相关资源
最近更新 更多