jq插件(答题专注模式)

(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jq select 插件是一个 jQuery 插件,用于美化 HTML 的 select 元素。它可以将 select 元素转换为带有自定义样式的下拉框,支持搜索、多选等功能,并且使用简单,兼容性好。 以下是 jq select 插件的一些特点: 1. 支持搜索:可以在下拉框中搜索选项,快速定位需要的选项。 2. 支持多选:可以选择多个选项,可以设置最大可选数量。 3. 支持自定义样式:可以根据需要自定义下拉框的样式,支持自定义图标、字体等。 4. 兼容性好:支持主流浏览器,包括 Chrome、Firefox、Safari、IE 等。 以下是使用 jq select 插件的示例代码: ``` <!-- HTML 代码 --> <select id="mySelect"> <option value="1">选项一</option> <option value="2">选项二</option> <option value="3">选项三</option> <option value="4">选项四</option> <option value="5">选项五</option> </select> <!-- 引入 jQueryjq select 插件 --> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/jquery-selectric/1.13.0/jquery.selectric.min.js"></script> <!-- 初始化 jq select 插件 --> <script> $(document).ready(function() { $('#mySelect').selectric(); }); </script> ``` 在上面的代码中,首先在 HTML 中定义了一个 select 元素,然后引入了 jQueryjq select 插件的 JS 文件,最后在 document.ready 函数中使用 selectric 方法初始化了 select 元素,即将 select 元素转换为一个带有自定义样式的下拉框。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值