重构 Jquery 函数以使其可重用
Refactor Jquery function to be reusable
我编写了一个函数,该函数将容器的偏移量与滚动时的窗口滚动顶部进行比较,并在容器距离视口顶部"X"像素数后淡入内容。现在,该功能特定于一个容器。我在页面上有另一个容器,我想在其上运行相同的函数,但对 jquery/javascript 相当陌生,无法找到重构以供重用的方法。
$(function(){
// Get the offset of container and compare it to $(window).scrollTop
var cont = $('.intro__skills-cont');
var contPos = cont.offset().top;
var windowPos = $(window).scrollTop();
// Hide skillsContainer
cont.addClass('is-hidden');
$(window).scroll(function(event){
windowPos = $(this).scrollTop();
if(windowPos > contPos - 250) {
cont.removeClass('.is-hidden');
cont.addClass('is-fading-up');
}
}); // end window scroll
});
这是我当前的HTML结构,我希望能够在其上运行函数
<div class="intro__skills-cont">
<div class="intro__skills-design">
<svg><use xlink:href="#shape-design" /></svg>
<h3 class="intro__skills-title">Design</h3>
<p class="intro__skills-sum">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam fugit illo pariatur ad dicta mollitia nulla provident repellendus doloribus at quam veniam cumque vitae neque, cupiditate, iusto, accusamus, tenetur perferendis.</p>
</div>
<div class="intro__skills-dev">
<svg><use xlink:href="#shape-dev" /></svg>
<h3 class="intro__skills-title">Development</h3>
<p class="intro__skills-sum">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam fugit illo pariatur ad dicta mollitia nulla provident repellendus doloribus at quam veniam cumque vitae neque, cupiditate, iusto, accusamus, tenetur perferendis.</p>
</div>
</div>
</div>
<div class="portfolio">
<h2 class="intro__title">Portfolio</h2>
<div class="portfolio__gallery">
</div>
</div>
我知道这看起来像是我在要求免费工作,但实际上只是在寻找朝着正确方向前进的动力。
这是我的最新尝试,但它在 contPos 上出错了任何帮助将不胜感激。干杯!
function fadeUp(containerClass) {
var cont = "$('." + containerClass + "')";
var contPos = cont.offset().top;
var windowPos = $(window).scrollTop();
cont.addClass('is-hidden');
$(window).scroll(function(event){
windowPos = $(this).scrollTop();
if(windowPos > contPos - 250) {
cont.removeClass('.is-hidden');
cont.addClass('is-fading-up');
}
});
}
fadeUp('intro__skils-cont');
我建议你编写函数来获取jQuery对象。然后,您可以在调用它时使用所需的任何选择器。此外,您应该编写它来处理多个元素。您可以使用.each()
。
function fadeUp($elements) {
$elements.each(function() {
var $element = $(this),
elementPos = $element.offset().top;
$element.addClass('is-hidden');
$(window).scroll(function() {
if ($(this).scrollTop() > (elementPos - 250)) {
$element.removeClass('is-hidden');
$element.addClass('is-fading-up');
}
});
});
}
然后,您可以像这样调用:
fadeUp($('.intro__skills-cont'));
fadeUp($('.intro__skills-dev'));
或者这个:
fadeUp($('.intro__skills-cont, .intro__skills-dev'));
或者在所有容器上放一个"容器"类,然后使用;
fadeUp($('.container'));
你的问题是行var cont = "$('." + containerClass + "')";
。 您希望将定位器传递给$()
,而不是创建字符串"$(intro__skills-cont)"
。
你可以尝试类似的东西
function fadeUp(container) {
var cont = $(container);
//...
}
fadeUp('.intro__skills-cont');
您会注意到,我没有将'.'
附加到定位器前面。 这样做的好处是允许你传入 DOM 对象以及 jQuery 定位器。
有几种方法可以做到这一点基于您当前的淡入淡出功能
function fadeUp(containerClass) {
var cont = $('.'+containerClass);
var contPos = cont.offset().top;
var windowPos = $(window).scrollTop();
cont.addClass('is-hidden');
$(window).scroll(function(event){
windowPos = $(this).scrollTop();
if(windowPos > contPos - 250) {
cont.removeClass('.is-hidden');
cont.addClass('is-fading-up');
}
});
}
相关文章:
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 如何从jquery函数返回变量
- 如何将具有文本类型值的var放入jQuery函数中
- Jquery函数在错误的时间提交
- 锚链接无法使用.slideUp jquery函数
- 重新分解jQuery函数
- 如何在视图模型contet更新更新上调用Jquery函数
- 如何向这个javascript/jquery函数添加参数
- 添加类来触发jquery函数
- 更改智能表中的页面将停止JQuery函数的工作
- 使用每500ms运行一次的jquery函数是个好主意吗
- jQuery函数不能只在一个页面上工作
- 如何将jquery函数链接到vanilla选择器
- 仅在小型设备上调用jQuery函数
- 如何将jquery函数仅应用于大屏幕
- 奇怪的jquery函数行为
- Backbone listenTo不将jquery函数作为处理程序进行激发
- 在jquery函数内部设置来自jquery函数的var;t运行
- 从Jquery函数中获取一个变量