淡定啊淡定

当代码里面出现很多if和return的时候我这种小白菜是要抓狂的。。

有些前端效果在dom的事件处理上比较啰嗦,而公司的framework乃至browser也总是出一些奇特的现象。。

于是bug出现了,改着改着就不淡定了。。

事实证明必须淡定,不淡定你永远没能力!

首先把自己写的代码逐一检查,必要时jshint发现一些语法上不规范的地方,比如循环内部不该干的事(= =;;)

然后把整体划分为各个功能性逻辑,比如计数是否准确?是否有必要阻挡冒泡?

如果确认了每部分代码都是正确的而结果不正确,那一定是时序出了问题。

如果时序也没有问题,可是事件的响应有些失控。。必要时下一些不太干净的狠手段,比如加flag。。

下面我模拟drag事件的时候就用一个flag阻断了多余的touchmove,在touchstart时还原。

否则我每拖一次,touchmove响应N多次,次数还不一定。

很难判断是用框架绑定时间的问题,还是其他问题。

一时得不到解决,或者说根本没人来解决,只有自己屏蔽了。

itu.xcontrol.define("tabMain", {

    views: ["tabMain.html"],
    _fnOnTouchStart: null,
    _fnOnTouchMove: null,
    _fnOnTouchEnd: null,
    _touchStartPosX: null,
    _touchStartPosY: null,

    constructor: function() {
        try {
            var me = this;
            me._fnOnTouchStart = iAuto.Util.bind(me, me._onTouchStart);
            me._fnOnTouchMove = iAuto.Util.bind(me, me._onTouchMove);
            me._fnOnTouchEnd = iAuto.Util.bind(me, me._onTouchEnd);

        } catch (e) {
            iAuto.Logger.error(e.stack);
        }
    },
    config: {

    },
    titles: ".titles",
    divs: "#tabMain_div",
    press: "pressed",
    left: "fromleft",
    right: "fromright",
    pop: "#tabMain_popularlist1",
    channel: "#tabMain_channelslist1",
    playlist: "#tabMain_playlists1",
    CUR: 1,
    tabs: ".tabs",
    TAB: "#tabMain_tabs",
    NONE: "none",
    isdoing: "false",

    onCreate: function() {
        this.setView("tabMain.html", {});
    },

    _createCmp_: function() {
        itu.xcontrol.create(‘popularList‘, ‘tabMain_popularlist1‘, {});
        itu.xcontrol.create(‘channelsList‘, ‘tabMain_channelslist1‘, {});
        itu.xcontrol.create(‘playLists‘, ‘tabMain_playlists1‘, {});
    },

    _bindEvent_: function() {
        var me = this;
        itu.event.addListener(‘tabMain_popularlist1‘, {
            ‘name‘: ‘popularList_pressed‘,
            ‘callback‘: me.on_tabMain_popularlist1_popularList_pressed,
            ‘context‘: me
        });
        itu.event.addListener(‘tabMain_channelslist1‘, {
            ‘name‘: ‘channelsList_pressed‘,
            ‘callback‘: me.on_tabMain_channelslist1_channelsList_pressed,
            ‘context‘: me
        });
        itu.event.addListener(‘tabMain_playlists1‘, {
            ‘name‘: ‘playList_pressed‘,
            ‘callback‘: me.on_tabMain_playlists1_playList_pressed,
            ‘context‘: me
        });
    },

    bindEvents: function() {
        try {
            var me = this;
            var $el = me.$element;
            var $titles = $el.find(me.titles);
            var $tab = $el.find(me.tabs);
            $tab.bind(‘touchstart‘, me._fnOnTouchStart);
            $tab.bind(‘touchmove‘, me._fnOnTouchMove);
            $tab.bind(‘touchend‘, me._fnOnTouchEnd);
            itu.event.on($titles, "touchstart", me.animateIn, me);
            itu.event.on($titles, "touchend", me.triggerTitles, me);
            for (var i = 1; i < 4; i++) {
                $(me.divs + i).attr("data-num", i);
            }
        } catch (e) {
            iAuto.Logger.error(e.stack);
        }
    },

    unbindEvents: function() {
        try {
            var me = this;
            var $el = me.$element;
            var $titles = $el.find(me.titles);
            var $tab = $el.find(me.tabs);
            $tab.unbind(‘touchstart‘);
            $tab.unbind(‘touchmove‘);
            $tab.unbind(‘touchend‘);
            itu.event.off($titles, "touchstart");
            itu.event.off($titles, "touchend");

        } catch (e) {
            iAuto.Logger.error(e.stack);
        }
    },

    animateIn: function(evt) {
        var me = this;
        var n = parseInt($(evt.target).data("num"));
        iAuto.Logger.log("[tabMain] num is:::", n);
        me.activeTitle(n);
        me.CUR = n;
    },

    triggerTitles: function(evt) {
        var me = this;
        var $el = me.$element;
        var id = $(evt.target).data("num");
        $el.trigger("title" + id + "_pressed");
    },

    onShow: function() {
        iAuto.Logger.log("[tabMain] onShow");
        var me = this;
        me.bindEvents();
    },

    onHide: function() {
        iAuto.Logger.log("[tabMain] onHide");
        var me = this;
        me.unbindEvents();
    },

    on_tabMain_popularlist1_popularList_pressed: function(evt) {
        // TODO Auto-generated method stub
        var me = this, $el = me.$element;
        var id = evt.data;
        me.CUR = 1;
        $el.trigger("popular_pressed", id);
    },

    on_tabMain_playlists1_playList_pressed: function(evt) {
        // TODO Auto-generated method stub
        var me = this, $el = me.$element;
        var id = evt.data;
        me.CUR = 2;
        $el.trigger("playlist_pressed", id);
    },

    on_tabMain_channelslist1_channelsList_pressed: function(evt) {
        // TODO Auto-generated method stub
        var me = this, $el = me.$element;
        var id = evt.data;
        me.CUR = 3;
        $el.trigger("channel_pressed", id);
    },
    setTitles: function(arr) {
        var me = this;
        var titles = arr;
        for (var i = 0; i < titles.length; i++) {
            $(me.divs + (i + 1)).html(titles[i] + ‘<div id="" class="span" style=""></div>‘);
        }
    },
    showPop: function(data) {
        var me = this;
        var item = data;
        var pop = me.getCmp("tabMain_popularlist1");
        pop.update(item);
        $(me.channel).hide();
        $(me.playlist).hide();
        $(me.pop).show();
    },
    showChannel: function(data) {
        var me = this;
        var item = data;
        var channel = me.getCmp("tabMain_channelslist1");
        channel.update(item);
        $(me.playlist).hide();
        $(me.pop).hide();
        $(me.channel).show();
    },
    showPlaylist: function(data) {
        var me = this;
        var item = data;
        var playlist = me.getCmp("tabMain_playlists1");
        playlist.update(item);
        $(me.channel).hide();
        $(me.pop).hide();
        $(me.playlist).show();
    },
    _onTouchStart: function(evt) {
        try {
            var me = this;
            if (evt.touches.length === 1) {
                me._touchStartPosY = parseInt(evt.touches[0].pageY);
                me._touchStartPosX = parseInt(evt.touches[0].pageX);
                evt.stopPropagation();
                me.isdoing = false;
            }
        } catch (e) {
            iAuto.Logger.error(e.stack);
        }
    },

    _onTouchMove: function(evt) {
        try {
            var me = this;
            var $el = me.$element;
            var currentPositionX = parseInt(evt.touches[0].pageX);
            var currentPositionY = parseInt(evt.touches[0].pageY);
            var offsetX = currentPositionX - me._touchStartPosX;
            var offsetY = currentPositionY - me._touchStartPosY;

            if (Math.abs(offsetY) > 30) {
                if (me.scroller !== null) {
                    itu.event.on(me.scroller, "scrollend", me.refreshMore, me);
                }
                return;
            }
            var isLeft = (Math.abs(offsetY) / Math.abs(offsetX) < 0.33) && offsetX < 0;
            var isRight = (Math.abs(offsetY) / Math.abs(offsetX) < 0.33) && offsetX > 0;
            if (isRight) {
                if (me.isdoing === true) {
                    return;
                }
                iAuto.Logger.log("[tabMain] _onTouchMove currentPositionX", currentPositionX);
                iAuto.Logger.log("[tabMain] _onTouchMove touchStartPosX", me._touchStartPosX);
                me.CUR--;
                if (me.CUR < 1) {
                    me.CUR = 3;
                }
                $el.trigger("title" + me.CUR + "_pressed");
                me.activeTitle(me.CUR);
                iAuto.Logger.log("[tabMain] go right CUR:::after", me.CUR);
                me.isdoing = true;
            }
            if (isLeft) {
                if (me.isdoing === true) {
                    return;
                }
                iAuto.Logger.log("[tabMain] _onTouchMove currentPositionX", currentPositionX);
                iAuto.Logger.log("[tabMain] _onTouchMove _touchStartPosX", me._touchStartPosX);
                me.CUR++;
                if (me.CUR > 3) {
                    me.CUR = 1;
                }
                $el.trigger("title" + me.CUR + "_pressed");
                me.activeTitle(me.CUR);
                iAuto.Logger.log("[tabMain] go left CUR:::after", me.CUR);
                me.isdoing = true;
            }
        } catch (e) {
            iAuto.Logger.error(e.stack);
        }
    },
    _onTouchEnd: function(evt) {
        try {
            var me = this;
            if (me.scroller !== null) {
                itu.event.off(me.scroller, "scrollend");
                iAuto.Logger.log("[tabMain] _onTouchEnd scrollend disabled");
            }
        } catch (e) {
            iAuto.Logger.error(e.stack);
        }
    },
    refreshMore: function(x, y) {
        var me = this;
        var $el = me.$element;
        var contentHeight = parseInt($(".c-scroller__scroller-content").css("height"));
        var scrollerHeight = parseInt($(".c-scroller").css("height"));
        var scrollerMaxY = contentHeight - scrollerHeight;
        if (y >= scrollerMaxY && scrollerMaxY > 0) {
            iAuto.Logger.log("[tabMain]:scrollMore loading more contents... ");
            $el.trigger("loadMore", me.CUR);
        } else if (y <= 0) {
            $el.trigger("refresh", me.CUR);
            iAuto.Logger.log("[tabMain]:scrollMore refreshing more contents... ");
        }
    },
    activeTitle: function(_n) {
        var me = this;
        var $el = me.$element;
        var n = _n;
        $el.find(me.titles).removeClass(me.press);
        $(me.divs + n).addClass(me.press);
    }
});

话说这段代码的初版是很惨不忍睹的。

花了几个小时时间几近绝望,但总算hold住了。

多处参考别人的处理(有些需求或者dom没这么复杂,有些堪称lib高端大气上档次看懂都难)。

总归吸取正能量。。比如用Y和X的比例小于0.33来屏蔽一些斜向滑动。

最后控制出来的效果很满意,很有成就感。

时间: 2024-10-14 05:23:46

淡定啊淡定的相关文章

汉语-词语-淡定:百科

ylbtech-汉语-词语-淡定:百科 淡定,网络流行语.一般是指沉着.镇定,淡泊名利.淡泊一切是是非非.网络中也指一些遇事沉着镇定的人为淡定哥.淡定姐.为了表现得从容些,“淡定.淡定” 似乎已经成了口头禅. 1.返回顶部 1. 中文名:淡定 外文名:take it easy,calm down,poised 本    意:冷静,镇定,从容 注    音:ㄉㄢˋ ㄉㄧㄥˋ 目录 1 定义 2 段子 定义 拼音:dàn dìng 释义:冷静,镇定. 许地山 <空山灵雨·银翎底使命>:“惟有几朵山

直播这么火,为何微信如此淡定?

2016,网红+直播,非常火爆的概念,一个贴片广告2000万的PAPI酱,在这个直播风口上,猪真的要飞起来了.直播平台越来越火,然而一向擅长模仿的腾讯微信确毫无动静,为何微信如此淡定? 今天纽带线CRM系统小编就跟大家一起分析微信会不会估直播. 对于微信是否做直播,外界有猜测,但微信一直很冷静.我们对这个话题做一些非官方的分析和推测: 微信会不会做直播,要拆成三个问题去看: 1.为什么要做直播? 2.用什么路径做直播? 3.有什么挑战? 先看第一个问题,微信为什么要做直播? 这是个看似不需要质疑

如何才能做一个淡定从容的人呢?

1.多经历一些事情,不断的去尝试新的东西,尝试在人群多的地方,你要说出你的观点,你的想法.2.多看书,多思考.很多事情的本质是一样的,人们总是对陌生的东西感到恐惧,当你知道了解的够多时就不会感到吃惊,害怕.就像古人害怕敬畏雷电,就是不够了解的缘故.另外足够的见识会对事情的发展更有预见性.3.让自己变得强大,在足够的的实力面前,任何意外都是不堪一击的.老虎不会因为松鼠的装神弄鬼而不淡定的.4.最重要的是要行动起来,一个空想家是不会成长的.当你的行动成为一个习惯,会发现其实没有想象的困难.

学会淡定

原以为经过时间的沉淀,自己可以较熟练的处理工作中遇到的问题了,可是现实还是给了自己重重的“一巴掌”: 筹划已久的交易项目即将要上线,所有人都在紧锣密鼓的更新交易的各种bug,可是今天一大早出现的bug就让自己“小难过”了一把: 看起来很好改的四个输入框的值,结果让自己调试了一天,中间有段时间居然又把自己急哭了…… 反思一下:起初在着手这个项目的时候,清楚的记得就是这里耽误了大家好长时间,今天又重蹈覆辙,栽在了这里:究其原因,还是因为自己考虑事情不够全面,在可以解决其中一部分问题后,再遇到久久不能

微信广告被收回 不为蛋疼为淡定

移动互联网广告在全球的兴起,似乎是被注定的.企业的追逐.平台的广阔.用户的认可.利润的丰厚,都让其成为广告界吸金流的新宠.尤其是依附于移动社交应用的广告,更是被看做互联网企业营收的未来中流砥柱.对于移动社交应用来说,广告业务就是它手中的"尚方宝剑",甚至连母公司都不能对其掉以轻心. 也正是因为移动互联网广告业务的重要性,母公司似乎不甘心让移动社交应用手握重兵,独立门户.腾讯宣布,目前旗下社交广告的业务将统一收入新部门"社交与效果广告部"麾下,其核心就是微信广告中心和

目标,信念,坚强,淡定,团队

1.什么叫目标? ——朝思暮想.做梦都想.时刻都想,而且一想起就热血沸腾,那才叫目标 2.什么叫信念? ——经历过冷嘲热讽.人情冷漠.三番四次的跌倒打击.几乎绝望的境地且还咬牙前行,那才叫信念! 3.什么叫坚强? ——经历过半夜抱头痛哭.经历过内心的孤寂与寒冷而依然坚定初衷,那才叫坚强! 4.什么叫淡定? ——面对诱惑而毫不动心.面对打击而面不改色,纵然困难重重也微笑前进,那才叫淡定! 5.什么叫团队? ——一起经历过风雨洗礼.跌宕起伏.浴血奋战.荣辱与共.艰难困境,依然迎难而上,创造奇迹,那才

每天淡定5分钟,你能多活几十年

目录: 0.总结 1.作者 2.自主神经分类 3.自主神经功能 4.自主神经与时间 5.自主神经的矩阵图 6.自主神经与寿命 7.调节自主神经方法 8.自主神经与武术 0.总结 通过增加线粒体,人会获得大量能量.通过调节自主神经,我们可以很好控制和发挥这些能量. 一内一外都处于平衡,人体将得到最佳状态. 1.作者 作者:日本--小林弘幸 2.自主神经分类 自主神经分类: (1)交感神经 (2)副交感神经 3.自主神经功能 自主神经决定健康的事.自主神经极大影响着我们的健康. 自主神经控制着内脏和

淡定平和的内心与奋斗不息的精神

毕业一年半,工作了的同学没有换工作的极少,大多数已经换了好几份.而没换的那位同学,在前两天看到我裸辞时,就忍不住开始向我诉苦. 这一年半来,无止尽的加班.冷漠的同事和领导,把她折磨得都快抑郁了.有一段时间,她因为压力太大耳鸣,感觉有股力量压在胸口,无法痛快地呼吸,甚至吃饭都感觉压得吃不下去. 她想要辞职,但是一方面家里不同意,另一方面自己也没考虑好接下来做什么,或者说没有好的下家,她还是选择继续忍受这份没有快乐可言的工作.之前那个乐观活泼的姑娘完全不见,取而代之的是这个痛苦压抑的"患者"

天猫超市先攻北京市场 传统商超们还如何淡定

继10亿红包补贴后,天猫超市又在北京市场发起1分钱抢购百万商品活动,对于天猫超市这种疯狂补贴北京市民的做法,沪杭人民对此表示很不满意,马云看着办吧,还想不想继续在杭州混了.始于沪杭的天猫超市,不先回馈沪杭市场用户,竟然先在北京市场给那么多优待,北京市场就那么有吸引力么? 始于沪杭却先攻北京?天猫超市进京一年半后开始发力 昨日,天猫超市又在晒成绩单了,还是这个商品卖了多少,那个商品卖了多少的老套路,1分钱抢购的吸引力还是蛮大的,天猫超市在北京这么疯狂的砸钱抢市场,让其他商超电商.商超O2O.传统商