Example #1
0
    /**
     * 创建二级nav元素,如果存在,直接展示
     *
     * @param {Object} config config.tabs,某个主导航的二级导航配置
     * @param {Object} navItems 缓存一级导航的对象,用来计算位置
     * @param {Object} subNavs 缓存二级导航的对象
     * @param {Object} main 一级导航容器
     * @param {string} index 一级导航navElement的index
     */
    function createOrShowSubNav(config, navItems, subNavs, main, index) {
        var ul = subNavs[index].nav;
        var isNew = false;

        if (!u.isObject(ul)) {
            isNew = true;
            ul = document.createElement('ul');
            ul.className = 'nav-sub';
            lib.insertAfter(ul, main);

            subNavs[index].nav = ul;
            subNavs[index].navItems = {};
            createNavElements(config, subNavs[index].navItems, ul, 'sub-');
        }

        toggleSubNav(subNavs, subNavs[index].nav, index);

        if (isNew) {
            // 二级导航位置的计算,二级导航的长度默认为去除最右子元素的边距后的剩余长度
            // 然后将二级导航的垂直平分线与一级导航子元素对齐
            var navOffset = lib.getOffset(main);
            var navItemOffset = lib.getOffset(navItems[index]);
            var subNavOffset = lib.getOffset(ul);
            var middleOfNavItem = navItemOffset.left + navItemOffset.width / 2;
            var marginLeft = (middleOfNavItem - subNavOffset.width / 2);
            if (marginLeft < -navOffset.left + 10) {
                marginLeft = -navOffset.left + 10;
            }
            ul.style.cssText = 'margin-left: ' + marginLeft + 'px';
        }
    }
Example #2
0
        /**
         * 初始化body内元素的坐标和宽度
         *
         * @param  {Slider}  slider 滑动杆控件
         */
        function initBodyElements(slider) {
            var bodyElement = slider.bodyElement;
            // 获取滑块容器的位置
            var bodyPos = lib.getOffset(bodyElement);

            var leftTop = slider.leftTop;
            var rightBottom = slider.rightBottom;
            var widthHeight = slider.widthHeight;

            // 获取滑块容器的宽度,用来计算值用
            slider[widthHeight] = bodyPos[widthHeight];

            // 滑块能去的最左边
            if (typeof slider.min !== 'undefined') {
                var minLeftTop = getLeftTopByValue.call(slider, slider.min);
                // 滑块所能去的最左边
                slider.minStartPos = bodyPos[leftTop] + minLeftTop;
                // 滑竿范围的最左边
                slider.startPos = bodyPos[leftTop];
            }

            // 滑块能去的最右侧
            if (typeof slider.max !== 'undefined') {
                var maxLeftTop = getLeftTopByValue.call(slider, slider.max);

                slider.maxEndPos = bodyPos[leftTop] + maxLeftTop;
                slider.endPos = bodyPos[rightBottom];
            }
        }
Example #3
0
        /**
         * 根据值获取滑块的位置
         *
         * @param {number} value 滑块的值
         * @return {number} 滑块的左侧位置
         * @private
         */
        function getLeftTopByValue(value) {
            var widthHeight = this.widthHeight;

            var bodyElement = this.bodyElement;
            // 获取滑块容器的位置
            var bodyPos = lib.getOffset(bodyElement);
            var tmpwidthHeight = bodyPos[widthHeight];
            var start = this.start;
            var end = this.end;

            var cursorLeftTop = (value - start) / (end - start) * tmpwidthHeight;

            return cursorLeftTop;
        }
Example #4
0
        /**
         * 根据鼠标位置,寻找离鼠标位置最近的handle
         *
         * @private
         * @param {Event} e 事件对象
         * @return {Element}
         */
        function findNearestCursorElement(e) {
            var pageXY = this.pageXY;
            var leftTop = this.leftTop;
            var bodyElement = this.helper.getPart('body');
            var bodyPos = lib.getOffset(bodyElement);

            var mouseLeftTop = e[pageXY] - bodyPos[leftTop];

            // 有两个滑块
            if (this.range) {
                var firstLeftTop = getLeftTopByValue.call(this, this.minRangeValue);
                var secondLeftTop = getLeftTopByValue.call(this, this.maxRangeValue);
                var middleLeftTop = firstLeftTop + (secondLeftTop - firstLeftTop) / 2;
                if (mouseLeftTop > middleLeftTop && this.cursorElementTwo) {
                    return this.cursorElementTwo;
                }
            }
            return this.cursorElement;
        }
Example #5
0
 function (elem, index) {
     elem.style.left = (index * footStepWidth - lib.getOffset(elem).width / 2) + 'px';
 }