Javascript 列表和页面顶部之间的空间
我正在使用一个我在网站上找到的设计,它看起来很酷,但我想把它改成我需要的样子 最初的演示是这样的 但我需要它们并排,所以我创建了一个宽度为100%的表,有两列。我把这两张单子都放在桌子上,但奇怪的事情发生了 我检查过了,上面没有填充物,也没有其他物体。列表和表格都设置为v-align。我附上了一个更好的参考和帮助 非常感谢大家Javascript 列表和页面顶部之间的空间,javascript,html,css,Javascript,Html,Css,我正在使用一个我在网站上找到的设计,它看起来很酷,但我想把它改成我需要的样子 最初的演示是这样的 但我需要它们并排,所以我创建了一个宽度为100%的表,有两列。我把这两张单子都放在桌子上,但奇怪的事情发生了 我检查过了,上面没有填充物,也没有其他物体。列表和表格都设置为v-align。我附上了一个更好的参考和帮助 非常感谢大家 <table width="100%" border="0"> <tbody valign="top"> <tr valign="to
<table width="100%" border="0">
<tbody valign="top">
<tr valign="top">
<td valign="top">
<ul class="tabs">
<li class="tabs__item color1">
<h2><span>[Review] The New LG G18</span></h2>
<p class="tabs__stats">Content</p>
</li>
<li class="tabs__item color2">
<h2><span>[ROM][8.3.1] SlimSaber R31</span> </h2>
<p class="tabs__stats">Content</p>
</li>
<li class="tabs__item color3">
<h2><span>[APP] Goo Simulator Extreme</span></h2>
<p class="tabs__stats">Content</p>
</li>
<li class="tabs__item color4">
<h2><span>[Tutorial] Pooping Your Pants</span></h2>
<p class="tabs__stats">Content</p>
</li>
<div class="views-toggle views-toggle--hidden">
<svg fill="white" viewBox="0 0 24 24">
<path d="M16.59 8.59l-4.59 4.58-4.59-4.58-1.41 1.41 6 6 6-6z"/>
<path d="M0 0h24v24h-24z" fill="none"/>
</svg>
</div>
</ul>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="js/index.js"></script>
</td>
<td valign="top">
<ul class="tabs">
<li class="tabs__item color1">
<h2><span>[Review] The New LG G18</span></h2>
<p class="tabs__stats">Content</p>
</li>
<li class="tabs__item color2">
<h2><span>[ROM][8.3.1] SlimSaber R31</span> </h2>
<p class="tabs__stats">Content</p>
</li>
<li class="tabs__item color3">
<h2><span>[APP] Goo Simulator Extreme</span></h2>
<p class="tabs__stats">Content</p>
</li>
<li class="tabs__item color4">
<h2><span>[Tutorial] Pooping Your Pants</span></h2>
<p class="tabs__stats">Content</p>
</li>
<div class="views-toggle views-toggle--hidden">
<svg fill="white" viewBox="0 0 24 24">
<path d="M16.59 8.59l-4.59 4.58-4.59-4.58-1.41 1.41 6 6 6-6z"/>
<path d="M0 0h24v24h-24z" fill="none"/>
</svg>
</div>
</ul>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="js/index.js"></script>
</td>
</tr>
</tbody>
</table>
-
[回顾]新LG G18
内容
-
[ROM][8.3.1]SlimSaber R31
内容
-
[应用程序]Goo Simulator Extreme
内容
-
[教程]拉屎
内容
-
[回顾]新LG G18
内容
-
[ROM][8.3.1]SlimSaber R31
内容
-
[应用程序]Goo Simulator Extreme
内容
-
[教程]拉屎
内容
这里的问题是javascript根据框在列表中的索引设置框在页面下方的显示距离
transY = index * 10;
我已经保存了fiddle()的一个副本,但以下是需要进行的更改:
将id添加到两个无序列表中:
<ul class="tabs" id="list1">
<ul class="tabs" id="list2">
同样在javascript中,更改以下内容:
tabs.each(function(index) {
transY = index * 10;
scale = 0.5 + index/25;
transform($(this), 'translate3d(0,' + transY + 'vh, 0) scale(' + scale + ')');
});
为此:
tabs1.each(function(index) {
transY = index * 10;
scale = 0.5 + index/25;
transform($(this), 'translate3d(0,' + transY + 'vh, 0) scale(' + scale + ')');
});
tabs2.each(function(index) {
transY = index * 10;
scale = 0.5 + index/25;
transform($(this), 'translate3d(0,' + transY + 'vh, 0) scale(' + scale + ')');
});
我们在这里做的是为这两列获取两个单独的列表。然后我们运行javascript,根据两个单独的列表设置框的位置,因此当它使用索引时,每列从0开始,这里的问题是javascript根据框在列表中的索引设置框在页面下方的显示距离,而不是继续第二列(第一列已结束)。
transY = index * 10;
我已经保存了fiddle()的一个副本,但以下是需要进行的更改:
将id添加到两个无序列表中:
<ul class="tabs" id="list1">
<ul class="tabs" id="list2">
同样在javascript中,更改以下内容:
tabs.each(function(index) {
transY = index * 10;
scale = 0.5 + index/25;
transform($(this), 'translate3d(0,' + transY + 'vh, 0) scale(' + scale + ')');
});
为此:
tabs1.each(function(index) {
transY = index * 10;
scale = 0.5 + index/25;
transform($(this), 'translate3d(0,' + transY + 'vh, 0) scale(' + scale + ')');
});
tabs2.each(function(index) {
transY = index * 10;
scale = 0.5 + index/25;
transform($(this), 'translate3d(0,' + transY + 'vh, 0) scale(' + scale + ')');
});
我们在这里做的是为这两列获取两个单独的列表。然后,我们运行javascript根据两个单独的列表设置框的位置,因此当它使用索引时,每列的索引将从0开始,而不是继续在第二列中,其中第1列已结束。这是moveTabs函数中需要的代码
var indexOffset = 0;
tabs.each(function(index) {
if ($(this).hasClass('tabs__first'))
indexOffset = index-1;
transY = (index-indexOffset) * 10;
scale = 0.5 + (index-indexOffset)/25;
然后首先将选项卡添加到要“重置”的第一个项目的类中
这是如何运作的--
- 在循环中,我检查第一个标记的制表符 当我看到它时,我将偏移量设置为比索引小一
- 当对项目进行转换而不是使用索引进行转换时(就像原始代码那样),我使用index indexOffset
fiddle-这是moveTabs函数中需要的代码
var indexOffset = 0;
tabs.each(function(index) {
if ($(this).hasClass('tabs__first'))
indexOffset = index-1;
transY = (index-indexOffset) * 10;
scale = 0.5 + (index-indexOffset)/25;
然后首先将选项卡添加到要“重置”的第一个项目的类中
这是如何运作的--
- 在循环中,我检查第一个标记的制表符 当我看到它时,我将偏移量设置为比索引小一
- 当对项目进行转换而不是使用索引进行转换时(就像原始代码那样),我使用index indexOffset
tabs.each(function(index) {
transY = index * 10;
scale = 0.5 + index/25;
transform($(this), 'translate3d(0,' + transY + 'vh, 0) scale(' + scale + ')');
});
永远不会被重置,因此您正在转换第二列,就像它们被添加到第一列一样
设置“transY”需要更好的逻辑。目前,您正在根据“选项卡”列表的索引进行设置,因此选项卡1为10vh,选项卡2为20vh,选项卡7为70vh
一个简单易懂的解决方案
如果您知道每列始终有4个“制表符”,您可以通过将上述内容修改为:
tabs.each(function(index) {
transY = (index%4) * 10;
scale = 0.5 + index/25;
transform($(this), 'translate3d(0,' + transY + 'vh, 0) scale(' + scale + ')');
});
否则,您需要修改设置“选项卡”y位置背后的逻辑,使其不完全基于“选项卡”的数量。这只是为了教育目的,向您展示为什么您的逻辑是错误的,以及一个不使用复杂技术的简单解决方案
编辑:
使用Jquery树导航的解决方案
一个非硬编码的解决方案,有点复杂。逻辑是抓取每个“tabs”列表,对于该“tabs”列表中的每个子元素,使用类“tabs\uu item”抓取每个列表元素,并基于该类转换它们的高度。这是100%模块化的,适用于任何数量的“标签”中的任何数量的“标签项目”,不需要修改CSS文件或更改当前结构
$('.tabs').each(function(index) {
$(this).children('li.tabs__item').each(function(index) {
transY = index * 10;
scale = 0.5 + index/25;
transform($(this), 'translate3d(0,' + transY + 'vh, 0) scale(' + scale + ')');
});
});
JS Fiddle链接:在javascript中
tabs.each(function(index) {
transY = index * 10;
scale = 0.5 + index/25;
transform($(this), 'translate3d(0,' + transY + 'vh, 0) scale(' + scale + ')');
});
永远不会被重置,因此您正在转换第二列,就像它们被添加到第一列一样
设置“transY”需要更好的逻辑。目前,您正在根据“选项卡”列表的索引进行设置,因此选项卡1为10vh,选项卡2为20vh,选项卡7为70vh
一个简单易懂的解决方案
如果您知道每列始终有4个“制表符”,您可以通过将上述内容修改为:
tabs.each(function(index) {
transY = (index%4) * 10;
scale = 0.5 + index/25;
transform($(this), 'translate3d(0,' + transY + 'vh, 0) scale(' + scale + ')');
});
否则,您需要修改设置“tabs”y位置背后的逻辑,使其不完全基于