检查元素是否在视口的30%和60%之间 [英] Check if element is between 30% and 60% of the viewport
本文介绍了检查元素是否在视口的30%和60%之间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我尝试改变< li>
元素在视口的30%到60%之间的颜色。
所以我有这个网格的元素堆叠并排,像这样:
我遇到过几个插件,例如Waypoints,Viewport Checker和其他几个, / p>
有什么想法吗?
我使用了一个非常简单的结构:
HTML
<!doctype html&
< html lang =en>
< head>
< meta charset =utf-8>
< title>< / title>
< meta name =descriptioncontent =>
< meta name =authorcontent =>
< link rel =stylesheethref =css / reset.css>
< link rel =stylesheethref =css / styles.css>
< script src =http://code.jquery.com/jquery-latest.min.jstype =text / javascript>< / script>
< script src =js / main.js>< / script>
<! - [if lt IE 9]>
< script src =http://html5shiv.googlecode.com/svn/trunk/html5.js>< / script>
<![endif] - >
< / head>
< body>
< ul>
< li>< / li>
< li>< / li>
< li>< / li>
< li>< / li>
< li>< / li>
< li>< / li>
< li>< / li>
< li>< / li>
< li>< / li>
< li>< / li>
< li>< / li>
< li>< / li>
< li>< / li>
< li>< / li>
< li>< / li>
< li>< / li>
< li>< / li>
< li>< / li>
< li>< / li>
< / ul>
< / body>
< / html>
CSS:
ul {
margin:auto;
}
ul li {
width:300px;
height:200px;
background:#f5f5f5;
float:left;
margin:10px;
}
ul li.middleviewport {
background:red;
}
解决方案
- 在
窗口上使用
滚动
事件处理程序 - c $ c> li 元素检查元素是否在感兴趣的视口中
- 获取
li
top
,并检查它是否在感兴趣的视口部分。
更改了 li
用于演示目的。
在代码中内嵌的注释。
ul {margin: list-style-type:none; padding:0;} ul li {width:50px; height:30px;背景:#f5f5f5; float:left; margin:10px; text-align:center; padding-top:10px} ul li.middleviewport {background:red;}
< script src =https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js>< / script>< ul> < li> 1< / li> < li> 2< / li> < li> 3< / li> < li> 4< / li> < li> 5< / li> < li> 6< / li> < li> 7< / li> < li> 8< / li> < li> 9< / li> < li> 10< / li> < li> 11< / li> < li> 12< / li> < li> 13< / li> < li> 14< / li> < li> 15< / li> < li> 16< / li> < li> 17< / li> < li> 18< / li> < li> 19< / li> < li> 20< / li> < li> 1< / li> < li> 2< / li> < li> 3< / li> < li> 4< / li> < li> 5< / li> < li> 6< / li> < li> 7< / li> < li> 8< / li> < li> 9< / li> < li> 10< / li> < li> 11< / li> < li> 12< / li> < li> 13< / li> < li> 14< / li> < li> 15< / li> < li> 16< / li> < li> 17< / li> < li> 18< / li> < li> 19< / li> < li> 20< / li> < li> 1< / li> < li> 2< / li> < li> 3< / li> < li> 4< / li> < li> 5< / li> < li> 6< / li> < li> 7< / li> < li> 8< / li> < li> 9< / li> < li> 10< / li> < li> 11< / li> < li> 12< / li> < li> 13< / li> < li> 14< / li> < li> 15< / li> < li> 16< / li> < li> 17< / li> < li> 18< / li> < li> 19< / li> < li> 20< / li> < li> 1< / li> < li> 2< / li> < li> 3< / li> < li> 4< / li> < li> 5< / li> < li> 6< / li> < li> 7< / li> < li> 8< / li> < li> 9< / li> < li> 10< / li> < li> 11< / li> < li> 12< / li> < li> 13< / li> < li> 14< / li> < li> 15< / li> < li> 16< / li> < li> 17< / li> < li> 18< / li> < li> 19< / li> < li> 20< / li>< / ul>
I am trying to change the color of <li>
elements when they are between 30% and 60% of the viewport.
So I have this grid of elements stacking side by side like this:
I ran into few plugins like Waypoints, Viewport Checker and few others but nothing good.
Any idea?
I am using a pretty simple structure :
HTML
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title></title>
<meta name="description" content="">
<meta name="author" content="">
<link rel="stylesheet" href="css/reset.css">
<link rel="stylesheet" href="css/styles.css">
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script src="js/main.js"></script>
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
</body>
</html>
CSS:
ul {
margin: auto;
}
ul li {
width: 300px;
height: 200px;
background: #f5f5f5;
float: left;
margin: 10px;
}
ul li.middleviewport{
background:red;
}
解决方案
- Use
scroll
event handler onwindow
- Loop over all the
li
elements to check if the element is in the interested viewport - Get the
li
position fromtop
and check if it is in the interested viewport section.
Changed the height of li
for demo purpose.
See the comments inline in the code.
$(document).ready(function() {
// Get viewport height, gridTop and gridBottom
var windowHeight = $(window).height(),
gridTop = windowHeight * .3,
gridBottom = windowHeight * .6;
$(window).on('scroll', function() {
// On each scroll check if `li` is in interested viewport
$('ul li').each(function() {
var thisTop = $(this).offset().top - $(window).scrollTop(); // Get the `top` of this `li`
// Check if this element is in the interested viewport
if (thisTop >= gridTop && (thisTop + $(this).height()) <= gridBottom) {
$(this).css('background', 'red');
} else {
$(this).css('background', 'gray');
}
});
});
});
ul {
margin: 0;
list-style-type: none;
padding: 0;
}
ul li {
width: 50px;
height: 30px;
background: #f5f5f5;
float: left;
margin: 10px;
text-align: center;
padding-top: 10px
}
ul li.middleviewport {
background: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
<li>11</li>
<li>12</li>
<li>13</li>
<li>14</li>
<li>15</li>
<li>16</li>
<li>17</li>
<li>18</li>
<li>19</li>
<li>20</li>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
<li>11</li>
<li>12</li>
<li>13</li>
<li>14</li>
<li>15</li>
<li>16</li>
<li>17</li>
<li>18</li>
<li>19</li>
<li>20</li>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
<li>11</li>
<li>12</li>
<li>13</li>
<li>14</li>
<li>15</li>
<li>16</li>
<li>17</li>
<li>18</li>
<li>19</li>
<li>20</li>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
<li>11</li>
<li>12</li>
<li>13</li>
<li>14</li>
<li>15</li>
<li>16</li>
<li>17</li>
<li>18</li>
<li>19</li>
<li>20</li>
</ul>
这篇关于检查元素是否在视口的30%和60%之间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文