Exemple #1
0
 move: function (ele) {
     var res = {};
     var v = dom.getStyle(ele, 'left');
     if (x && v) {
         x += parseInt(v, 10);
         res.left = x + 'px';
     }
     v = dom.getStyle(ele, 'top');
     if (y && v) {
         y += parseInt(v, 10);
         res.top = y + 'px';
     }
     return res;
 }
Exemple #2
0
 scale: function (ele) {
     var items = parseTransform(dom.getStyle(ele, 'transform'));
     rate += parseFloat(items.scale || '1');
     return {
         transform: 'scale(' + rate + ')'
     };
 }
Exemple #3
0
 skew: function (ele) {
     var items = parseTransform(dom.getStyle(ele, 'transform'));
     deg += parseInt(items.skew || '0', 10);
     return {
         transform: 'skew(' + deg + 'deg)'
     };
 }
Exemple #4
0
 rotate: function (ele) {
     var items = parseTransform(dom.getStyle(ele, 'transform'));
     deg += parseInt(items.rotate || '0', 10);
     return {
         transform: 'rotate(' + deg + 'deg)'
     };
 }
Exemple #5
0
 Object.keys(bar).forEach(function (key) {
     if (commonKeys.indexOf(key) < 0
         && dom.getStyle(bar[key], 'position') === 'fixed'
     ) {
         eles.push(bar[key]);
     }
 });
Exemple #6
0
            eles.forEach(function (ele, index) {
                if (index >= frontFixedNum) {
                    parent = back.main;
                }
                // 保存原始样式信息
                data = {};
                attrs.forEach(function (key) {
                    data[key] = ele.style[key] || null;
                });
                attrData.push(data);

                // 当前位置计算
                pos = dom.position(ele);
                // 计算margin-top, margin-left
                for (var i = 0, max = 2; i < max; i++) {
                    value = parseInt(dom.getStyle(ele, 'margin-' + attrs[i]), 10);
                    if (!isNaN(value)) {
                        pos[attrs[i]] -= value;
                    }

                    // 修正offsetParent的margin影响
                    value = parseInt(dom.getStyle(parent, 'margin-' + attrs[i]), 10);
                    if (!isNaN(value)) {
                        pos[attrs[i]] -= value;
                    }
                }

                // 改变position
                util.setStyles(ele, {
                    position: 'absolute',
                    top: pos.top + 'px',
                    left: pos.left + 'px',
                    width: dom.getStyle(ele, 'width') + 'px',
                    height: dom.getStyle(ele, 'height') + 'px',
                    bottom: 'auto',
                    right: 'atuo'
                });
            });
 Object.keys(properties).forEach(function (name) {
     oldStyles[name] = dom.getStyle(ele, name);
 });
Exemple #8
0
 items.forEach(function (name, index) {
     value = parseInt(dom.getStyle(ele, 'padding-' + name), 10);
     res[index % 2 ? 'width' : 'height'] -= value;
 });
Exemple #9
0
        keys.forEach(function (key) {
            var item = {
                    front: frontBars[key],
                    back: backBars[key]
                };

            // name相同表示bar不需要转场效果
            // name不同表示bar要进行滑入渐变转场
            item.change = item.front.getAttribute('data-name')
                            !== item.back.getAttribute('data-name');

            var front = item.front;
            var pos = util.getPosition(front);
            var position = dom.getStyle(front, 'position');

            // 创建一个替代元素进行占位
            var ele;
            if (position !== 'fixed' && position !== 'position') {
                // static 与 relative 的bar 需要具有样式的占位元素
                ele = document.createElement(front.tagName);
                ele.className = front.className;
                ele.style.cssText += ';'
                                    + front.style.cssText
                                    + ';padding:0;border:0'
                                    + ';width:' + front.offsetWidth + 'px'
                                    + ';height:' + front.offsetHeight + 'px';
            }
            else {
                // absolute 与 fixed 的bar 不需要占位
                // 只需要一个回归的基准节点
                ele = document.createElement('ins');
                ele.style.display = 'none';
            }
            item.frontBlock = ele;
            front.parentNode.insertBefore(ele, front);

            // fixed定位的bar需要移动到body下
            // transform时fixed定位是相对与transform的父容器
            // 而非body
            if (options.transform
                && dom.getStyle(item.back, 'position') === 'fixed'
            ) {
                var block = item.backBlock = document.createElement('ins');
                block.style.display = 'none';
                item.back.parentNode.insertBefore(block, item.back);
                document.body.appendChild(item.back);
            }

            // 将前页中的bar放置到body中并进行绝对定位
            // 遮挡住后页相同位置的待转入bar
            ele = front;
            item.frontCSSBack = ele.style.cssText;
            if (position !== 'fixed') {
                var size = util.getSize(ele);
                ele.style.width = size.width + 'px';
                ele.style.height = size.height + 'px';
                ele.style.position = 'absolute';
                ele.style.top = pos.top + 'px';
                ele.style.left = pos.left + 'px';
            }

            document.body.appendChild(ele);
            // 强制刷新
            !!ele.offsetWidth;

            res.push(item);
        });
Exemple #10
0
define("saber-viewport/util",["require","saber-dom"],function(require){var t=require("saber-dom"),exports={};return exports.setStyles=function(e,n,r){Object.keys(n).forEach(function(r){t.setStyle(e,r,n[r])}),r&&e.offsetWidth},exports.getSize=function(e){var n,r=["top","right","bottom","left"],i={width:e.clientWidth,height:e.clientHeight};return r.forEach(function(r,o){n=parseInt(t.getStyle(e,"padding-"+r),10),i[o%2?"width":"height"]-=n}),i},exports.getPosition=function(t){var e=t.getBoundingClientRect(),n=document;return e.top+=Math.max(n.documentElement.scrollTop,n.body.scrollTop),e.left+=Math.max(n.documentElement.scrollLeft,n.body.scrollLeft),e},exports});