美文网首页
从一个轮播图看多线程

从一个轮播图看多线程

作者: 追逐_e6cf | 来源:发表于2018-08-30 22:36 被阅读0次

今天用运动框架做了一个无缝轮播图,因为感觉做这个轮播图收获很大,通过js的同步和异步代码分析,第一次对多线程有了亲身的理解,源码放到了GitHub上。https://github.com/chengminggit/seamlessCarousel.git
要做到无缝轮播,就需要“欺骗用户”。

轮播案例
表面上看是有8张图片,但是实际上有10张,在第一张的前面有一张和最后一张一样的图片,同理在最后一张的后面有一张和第一张一样的图片,当用户在第一张点击上一张的按钮后,会执行动画跳到“假的”最后一张,当动画结束后,迅速把图片换成“真的”最后一张,因为这个过程太快了,人的眼睛无法分辨,从而实现以假乱真。
但是,执行动画的代码是异步代码,而最后的切换图片只有一行代码,是同步代码,js代码的执行顺序是先执行同步代码,后执行异步代码,如果在执行轮播动画切换的代码后面直接写如下代码:
animetion(oImg,{
   left:(-336*index)
   },{
      time : 600,
      type : "Bounce",//规定运动曲线
      typeAction : "easeOut"//曲线类型
   });
   li();
oImg.style.left = -336*index + "px";

那么实际的执行顺序是这样的:

oImg.style.left = -336*index + "px";
animetion(oImg,{
   left:(-336*index)
   },{
      time : 600,
      type : "Bounce",//规定运动曲线
      typeAction : "easeOut"//曲线类型
   });
   li();

没错,最后一句代码因为是同步代码,所以执行的顺序优先于上面的异步代码,但是这不是我们想要的,这就好比有两个线程A、B,我们明明希望A先执行,而后B在执行,但是实际的情况却正好相反。
所以这就需要给B线程加一把锁,而钥匙放在A线程的代码执行最后,只有A线程执行结束,才能获得这把锁,从而打开B线程。代码如下:

 flag = true;
 if(index>=9 && flag){
      index = 1;
      oImg.style.left = -336*index + "px";
 }
  if(index<=0 && flag){
      index = 8;
      oImg.style.left = -336*index +"px";

开始设置flag为false,只有当A线程(即运动的动画)执行结束,才将这把锁的钥匙拿到(flag置为true)。这就满足了要求。
以上就是从一个轮播图中理解的多线程,当程序中线程多的时候,原理也可以去类比。另外这个轮播图是自己用原生js封装的运动框架,以及运动方式用到的是Tween.js里的函数,可以根据自己的需求去定制,这里不再赘述,源码中的注释都很详细。

相关文章

  • 从一个轮播图看多线程

    今天用运动框架做了一个无缝轮播图,因为感觉做这个轮播图收获很大,通过js的同步和异步代码分析,第一次对多线程有了亲...

  • 简单的轮播图,你会吗?

    开始做第一个轮播图 第一个轮播图比较简单,显示隐藏的方式轮播图片。废话少说直接看效果。 效果https://gks...

  • 多轮播图的设计

    列表展示多个轮播图 多个轮播图同时显示 多个轮播图不定时进行轮播动画 对应呈现的关系:1个TableView、一个...

  • 无标题文章

    轮播图分为:传统轮播图、间歇轮播图、呼吸轮播图、无缝滚动轮播图等。它们各具特色,各有用处。 1.传统轮播图 第一步...

  • 轮播图

    轮播图分为:传统轮播图、间歇轮播图、呼吸轮播图、无缝滚动轮播图等。 1.传统轮播图 第一步,得到元素 第二步,设置...

  • 现金红包

    每日红包 轮播图 详情图 周末红包 轮播图 详情图 圣诞红包 轮播图 详情图

  • day7_作业

    轮播图1 轮播图2

  • [iOS]定制性强的广告轮播图--SCAdView

    @[无限轮播图] @[3D轮播图] @[广告轮播图] SCAdView Statement If my code ...

  • vue过渡效果-轮播图

    为了在vue里做个轮播图,找遍了网页博客,终于找到一个看的懂得文章具体轮播图的做法参考原文地址:点击这里 vue过...

  • 以24小时为例,PHP根据开始时间和结束时间,检测时间段是否被占

    需求:轮播图管理,24小时内有多张轮播图,每张轮播图可以播放一个时间段,单位为小时hour。为避免冲突,在设置轮播...

网友评论

      本文标题:从一个轮播图看多线程

      本文链接:https://www.haomeiwen.com/subject/zofjwftx.html