SongKer 发布时间:2016-05-20 分类:Web 阅读:5208次 3 条评论
最近做了一个企业网站,右侧自动加载一个导航浮动层,随着网页上下滚动到某些模块,自动添加右侧导航栏对应项目的浮动效果。
刚开始自己做了一段JS代码,但是要在每个使用的页面复制同样的代码的话,代码量也比较大了。所以准备自己做一个右侧面板滚动插件。特将编写过程写出来,第一次写jquery插件,轻拍..
演示地址:http://www.songker.com/Code/plugin/rightpanel.html
插件需要用到某些扩展方法,我写成了全局方法:
//扩展方法 格式化
$.format = function (source, params) {
if (arguments.length == 1)
return function () {
var args = $.makeArray(arguments);
args.unshift(source);
return $.format.apply(this, args);
};
if (arguments.length > 2 && params.constructor != Array) {
params = $.makeArray(arguments).slice(1);
}
if (params.constructor != Array) {
params = [params];
}
$.each(params, function (i, n) {
source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
});
return source;
};
// 元素是否在窗口内
$.inWindow = function ($el) {
var wHeight = $(window).height();
var bTop = $('body').scrollTop() || $('html').scrollTop();
var eTop = $el.offset().top + 100;
return wHeight + bTop > eTop && bTop < eTop;
};这些扩展方法其它地方也可能用到,所以我写的是jquery全局函数,可以用$.inWindow 等方式调用全局方法。
开发的jquery插件,(function ($) { /* code */ })(jQuery); 使用对象级别的插件开发。代码如下:
(function ($) {
var RightPanel = function (that, options) {
this.opts = $.extend({
_panelclass: "backpanel-inner"
}, options);
this.$o = $(that);
this.init();
this.scrolling(this.$o);
this.bindclick(this.$o);
};
RightPanel.prototype = {
init: function () {
var items = $("div[data-fid]"), appendHtml = "";
appendHtml += $.format('<div class="{0}">', this.opts._panelclass);
items.each(function () {
var i = $(this).data("fid"), title = $(this).data("title");
appendHtml += $.format('<div class="bp-item bp-item-floor-links floor-fore{0}" data-top="{0}">', i);
appendHtml += $.format(' <a href="#none" class="floor-links floor-fore{0}" target="_self">{1}</a><span>{0}F</span><s></s>', i, title);
appendHtml += "</div>";
});
appendHtml += '<div class="bp-item bp-item-backtop"> <a href="#" class="backtop" target="_self">返回顶部</a><span></span><s></s></div>';
appendHtml += '<p class="foll-hd">顾陌博客<br>songker.com</p></div>';
this.$o.html(appendHtml);
},
scrolling: function ($panel) {
$(window).bind('scroll', function () {
var panelBox = $panel.children(":first");
var scrollTop = $(document).scrollTop();
if (scrollTop > 80) panelBox.css("display", "block");
else panelBox.css("display", "none");
$("div[data-fid]").each(function () {
var i = $(this).attr("data-fid");
if ($.inWindow($(this))) {
panelBox.find("div[data-top='" + i + "']").addClass("curr").find("a").addClass("curr");
}
else {
panelBox.find("div[data-top='" + i + "']").removeClass("curr").find("a").removeClass("curr");
}
});
});
},
bindclick: function ($panel) {
var panelBox = $panel.children(":first");
panelBox.find("div[data-top]").click(function () {
var i = $(this).data("top");
var len = $("div[data-fid='" + i + "']").offset().top;
$("body,html").animate({ scrollTop: len }, 500);
return false;
});
}
};
$.fn.RightPanel = function (options) {
var plugin = new RightPanel(this, options);
};
})(jQuery);上面的代码写了一个RightPanel 的对象,类似于一个命名空间。$.fn.RightPanel的意义是可以通过$("element").RightPanel()的方式调用。
它包含三个执行方法,init、scrolling、bindclick。这三个方法对应的功能,Init 初始化传入的值以及生成展示的html,scrolling负责对窗体滚动事件做出相应响应,bindclick绑定点击事件。
在页面上调用该插件:
<div class="backpanel"></div>
<script type="text/javascript">
$(function () { $(".backpanel").RightPanel({});});
</script>在页面需要导航的元素上添加属性, data-fid="0" data-title="显示标题"。data-fid是展示的序号, data-title是右侧显示的标题。
关键字词: jQueryjQuery插件jQuery插件开发
上一篇:简单的手机404页面模板下载
下一篇:导航栏文字滑动阴影特效一
发布于 2016-06-26 16:44:47 回复该评论
发布于 2016-06-29 00:06:13 回复该评论
发布于 2016-05-24 15:09:47 回复该评论
发表评论:
◎欢迎您的参与讨论。