(function ($) {
$.hhh= $.hhh|| {}
$.hhh.oneByOne = function (options) {
this.defaults = {
formWidgets: $(".form-section article.form-widget"),//获取所有题目
widgetsWrap: $(".content-wrap"),//表单内容的wrap,用于设置margin
widgetParentNode: $(".form-section"),//题目的父节点
footerFixedNode: $(".form-sidebar"),//footer
widgetStr: "article.form-widget",//绑定点击事件的元素,即题目
delay:200 //滚动节流的延迟时间
}
this.settings = $.extend({}, this.defaults, options);
this.init();
}
$.extend($.hhh.oneByOne, {
prototype: {
init: function () {
//获取最后一个题目的offsetTop
var lastOffsetTop = this.settings.formWidgets.eq(this.settings.formWidgets.length - 1).offset().top;
var scrollVal = $(document).height() - $(window).height()
var minusVal = lastOffsetTop - scrollVal;
//获取第二个题目的offsetTop
var secondWidgetOffset = this.settings.formWidgets.eq(1).offset().top;
var computedMarginTBVal = Math.ceil((minusVal - secondWidgetOffset) / 2);
//设置两头的margin, 使其产生足够长度的滚动条
this.settings.widgetsWrap.css({
"margin-top": computedMarginTBVal + "px",
"margin-bottom": computedMarginTBVal + "px"
})
//默认第一个显示(去除overlay:css中设置的透明度)
this.settings.formWidgets.addClass("overlay");
this.settings.formWidgets.eq(0).removeClass("overlay");
//绑定事件
this.bindEvent();
},
//滚动节流
throttle: function (func, delay) {
var timer;
return function (minVal, maxVal, formWidgets) {
if (!timer) {
timer = setTimeout(function () {
func(minVal, maxVal, formWidgets);
timer = null
}, delay)
}
}
},
//根据条件显示题目
widgetDisplay: function (minVal, maxVal, formWidgets) {
formWidgets.each(function (_, item) {
var offsetTop = $(item).offset().top;
var winScroll = $(window).scrollTop();
var clientTop = offsetTop - winScroll;
if (clientTop >= minVal && clientTop < maxVal) {
$(item).removeClass("overlay").siblings().addClass("overlay");
}
})
},
bindEvent: function () {
//传参
var formWidgets = this.settings.formWidgets;
var that = this;
//滚动
$(window).scroll(function () {
var firstOffset = that.settings.formWidgets.eq(0).offset().top;
var secondOffset = that.settings.formWidgets.eq(1).offset().top;
var throttleCallBack = that.throttle(that.widgetDisplay, that.settings.delay);
throttleCallBack(firstOffset, secondOffset, formWidgets)
});
//题目点击显示且滚动到中间区域
this.settings.widgetParentNode.on("click", this.settings.widgetStr, function () {
$(this).removeClass("overlay").siblings().addClass("overlay");
var containerHeight = ($(window).height() - that.settings.footerFixedNode.height()) / 2;
var halfHeight = ($(this).height()) / 2;
var _offsetTop = Math.ceil(containerHeight - halfHeight)
var selfOffsetTop = $(this).offset().top;
$('body,html').animate({ scrollTop: (selfOffsetTop - _offsetTop) }, "ease");
})
}
}
});
})(jQuery);
var hhh_oneByOne = new $.hhh.oneByOne();//可以传参,参考this.defaults