javascript - 这段代码怎么封装好?
迷茫
迷茫 2017-04-11 12:13:16
[JavaScript讨论组]

实现的功能是:

1.
页面下拉时固定nav

// 固定nav栏目
    $.fn.smartFloat_mall = function() {
    var position = function(element) {
        var top = element.position().top;
        var left = element.position().left;
            pos = element.css("position");
        $(window).scroll(function() {
            var scrolls = $(this).scrollTop();
            if (scrolls >= top) {
                if (window.XMLHttpRequest) {
                    element.css({
                        position: "fixed",
                        top: "0.81rem",
                        left: left
                    });
                } else {
                    element.css({
                        top: scrolls,
                        left: left
                    }); 
                }
            }else {
                element.css({
                    position:"absolute",
                    top: "2.32rem",
                    left: 0,
                });
            }
        });
    };
        return $(this).each(function() {
            position($(this));                       
        });
    };
    
    $.fn.smartFloat_nav = function() {
    var position = function(element) {
        var top = element.position().top;
        var left = element.position().left;
            pos = element.css("position");
        $(window).scroll(function() {
            var scrolls = $(this).scrollTop();
            if (scrolls >= top) {
                if (window.XMLHttpRequest) {
                    element.css({
                        position: "fixed",
                        top: "1.81rem",
                        left: left
                    });
                } else {
                    element.css({
                        top: scrolls,
                        left: left
                    }); 
                }
            }else {
                element.css({
                    position:"absolute",
                    top: "2.32rem",
                    left: 0,
                });
            }
        });
    };
        return $(this).each(function() {
            position($(this));                       
        });
    };
    
    $(document).ready(function() {
       $("#fix_pa").smartFloat_header();
       $("#fix_pa").smartFloat_nav();
    });

问题是两个栏目后端是分离成组件并且公用的(smarty)!
结构和公用是很大的限制,还有代码冗余,这段代码如何分装比较好,变化的参数写进
smartFloat_nav();
smartFloat_header();其中方法里面?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(1)
迷茫

比较了一下你的代码,两段代码只有这么一点不一样

所以可以封装成一个函数,最多只是 smartFloat_navsmartFloat_mall 调用不同。

共用部分不想暴露出来可以写成闭包

(function() {
    function smartFloat(position1, position2) {
        var position = function(element) {
            var top = element.position().top;
            var left = element.position().left;
            pos = element.css("position");
            $(window).scroll(function() {
                var scrolls = $(this).scrollTop();
                if (scrolls >= top) {
                    if (window.XMLHttpRequest) {
                        element.css({
                            position: "fixed",
                            top: position1,
                            left: left
                        });
                    } else {
                        element.css({
                            top: scrolls,
                            left: left
                        });
                    }
                } else {
                    element.css({
                        position: "absolute",
                        top: position2,
                        left: 0,
                    });
                }
            });
        };
        return $(this).each(function() {
            position($(this));
        });
    }

    $.fn.smartFloat_mall = function() {
        smartFloat("0.81rem", "2.32rem");
    };
    $.fn.smartFloat_nav = function() {
        smartFloat("1.81rem", "2.32rem");
    };
})();
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号