九宫格有规律高亮滚动效果

  前几天朋友去面试,面试官要求当场用九宫格写出一个滚动有规律的大转盘滚动高亮效果,结果可想而知。如下图:

  也就是说当页面刚进来的时候,红色方块在左上角,接下来按照图上所标注的箭头方向来依次循环。当我听说了这个面试题之后,我就利用空余时间写了一下此效果,结果研究了两种方法:

方法一:首先我想到的是,既然要滚动,那么当然要运用到定时器,后来我就想既然要实现这个轨迹重复的循环下去,那么就要用到一些数字变量,代码如下

结构:

 1   <ul>
 2     <li></li>
 3     <li></li>
 4     <li></li>
 5     <li></li>
 6     <li></li>
 7     <li></li>
 8     <li></li>
 9     <li></li>
10     <li></li>
11   </ul>

js:

 1     // num和num1为当前所要高亮的li标签的下标,
 2     // num2为记录当前在经过中间那一行时到底是往上边滚动还是往下边滚动的一个变量
 3     var num = num2 = 0, num1 = 6;
 4     setInterval(function () {
 5       if (num < 4) {  // 第一行滚动
 6         if (num1 != 6) {
 7           num1 = 6;
 8         }
 9         num  ;
10         $("li").eq(num - 1).css("background", "red").siblings().css("background", "#fff");
11        }
12        if (num >= 4 && num < 6) {  // 第二行滚动
13          if (num1 <= 3) {
14            num2  ;
15            if (num2 % 2 == 1) { // 向第三行滚动
16              num = 6;
17              num  ;
18              $("li").eq(num - 1).css("background", "red").siblings().css("background", "#fff");
19              return;
20            } else {  // 向第一行滚动
21              num = 0;
22              num  ;
23              $("li").eq(num - 1).css("background", "red").siblings().css("background", "#fff");
24              return;
25            }
26          }
27          $("li").eq(num1 - 1).css("background", "red").siblings().css("background", "#fff");
28          num1--;
29        }
30        if (num >= 6) {  // 第三行滚动
31          num  ;
32          $("li").eq(num - 1).css("background", "red").siblings().css("background", "#fff");
33          if (num > 8) {
34            num1 = 6;
35            num = 4;
36          }
37        }
38      }, 100);

  这是我当时脑海里想到的第一种方法,这种方法在想的时候比较好想,但是在写代码的时候会发现很头疼,虽然仅仅只有三个数字变量,但是他们之间紧密联系,一旦一个变量出现问题,那么滚动的轨迹都会出现问题,相对第二种方法来说比较烧脑!

  后来我就琢磨着有没有更好的方法来解决这个烧脑的问题。脑子一转,机灵一动,呵呵哒,突然想到了数组,能不能用数组将要显示的高亮方块的轨迹放到数组中,然后通过遍历数组,让其高亮显示,所以第二种方法就诞生了。

方法二:通过遍历提前写好的数组轨迹,来实现滚动效果,代码如下:

1    var arr = [0, 1, 2, 5, 4, 3, 6, 7, 8, 5, 4, 3]; // 定义运动轨迹数组
2    var num;  // 定义当前遍历的数组下标
3    setInterval(function () {
4      if (num > arr.length - 1) {
5        num = 0;
6      }
7      $("li").eq(arr[num]).css("background", "red").siblings().css("background", "#fff");
8      num  ;
9    }, 200)

  结果当然是可以的,仅仅就用了几行代码就能搞定(也许会有很多大牛会有更方便、更简洁的方法来实现此功能)。

总结:通过这个小小的案例 ,让我感觉我们在做开发的过程中,都可能会遇到很多烧脑的问题,但是当我们在朝另外的方向走走,也许就会有更好、更便捷的方法来实现自己所需的功能。


更多专业前端知识,请上 【猿2048】www.mk2048.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[源码学习]调试Razor从哪里开始

使用ASP.NET MVC时&#xff0c;我们知道&#xff0c;要使用Views中的视图&#xff0c;需要在Action中写 return View(); 这个方法返回的返回值是一个 ViewResult&#xff0c;进入这个类&#xff0c;继承了父类ViewResultBase后只写了MasterName属性和FindView方法。 不过已经开…

使用Maven原型高效创建Eclipse模块

Maven Archetype是一个项目模板工具包&#xff0c;可为开发人员提供生成内置或自定义脚手架工件的参数化版本的方法。 最近&#xff0c;我将其应用于我们的Xiliary P2存储库&#xff0c;以实现Eclipse模块存根创建的自动化。 由于效果很好&#xff0c;所以我认为值得在这篇文章…

ubuntu 编译 /usr/bin/ld: cannot find 问题解决

参考文档&#xff1a; http://www.iq38.com/38536.html linux下编译应用程序常常会出现如下错误&#xff1a; /usr/bin/ld: cannot find -lxxx 意思是编译过程找不到对应库文件。其中&#xff0c;-lxxx表示链接库文件 libxxx.so。 注&#xff1a;有时候&#xff0c;由于库文件是…

CSS知识点整理(2):框模型,定位

1. 框模型&#xff1a;Box Model 规定了元素处理元素框处理元素内容、外边距、边框、内边距的方式。 2. 当边距给定的值 可以小于4个。CSS定义了一些规则、处理这中情况&#xff1a; 如果缺少左外边距的值&#xff0c;则使用右外边距的值。如果缺少下外边距的值&#xff0c;则…

Vux的安装使用

1、Vux的安装 1.1、vue-cli的vux模板生成项目 可以直接使用 vue-cli 的模板生成一个 vux 项目 vue init airyland/vux2 projectName 由此可以直接使用 vux。&#xff08;或许运行项目可能会报错&#xff0c;那是 vue-cli 初始项目的通病&#xff09; 1.2、手动安装 vux 首先在项…

Spring Data JPA教程:获取所需的依赖关系

在创建使用Spring Data JPA的应用程序之前&#xff0c;我们需要获取所需的依赖关系。 这篇博客文章标识了必需的组件&#xff0c;并描述了如何使用Maven获得它们。 让我们开始吧。 其他阅读&#xff1a;如果您不熟悉Spring Data JPA&#xff0c;则应该阅读以下博客文章&…

元素属性的添加删除(原生js)

添加属性 odiv.setAttribute("title","hello div!");odiv.setAttribute("class","boxClass");odiv.setAttribute("hello","divTag");//自定义属性设(hello"divTag") 获取属性 var vodiv.getAttribute(&…

framelayout

编写的mail.xml文件: <?xml version"1.0" encoding"utf-8"?><FrameLayout xmlns:android"http://schemas.android.com/apk/res/android" android:id"id/frame" android:layout_width"fill_parent" android:layou…

Git 使用的问题总结

1、git stash pop 显示 xxx already exists, no checkout 当我们先使用 git stash save -u 保存信息说明 来储藏更改&#xff0c;然后拉取代码 git pull&#xff0c;如果你的本地修改有新建文件&#xff0c;远程也有新建文件&#xff0c;并且两者同名&#xff0c;此时应用储藏 …

在OpenShift上托管的WildFly实例上进行Arquillian测试

技术提示&#xff03;54解释了如何为现有Java EE项目启用Arquillian。 在该技巧中&#xff0c;测试是针对本地安装的WildFly服务器运行的。 如果此WildFly实例在OpenShift上运行&#xff0c;那么同一个适配器也可以工作吗&#xff1f; 没有&#xff01; 因为与xlocalhost相比&…

js基础---数组方法

数组数据的排序及去重   sort无形参的排序方式 arr1[2,12,3,15];var aarr1.sort();console.log(arr1);console.log(a);//排序会改变原本数组是顺序&#xff0c;是依据首个字符的大小开始排名sort有形参的排序方式方法1arr2[2,12,3,15];var barr2.sort(function(n1,n2){if(n1&…

扩展Asterisk1.8.7的CLI接口

我之前有一篇文章&#xff08;http://www.cnblogs.com/MikeZhang/archive/2012/04/14/asteriskCLIAppTest20120414.html&#xff09;介绍过如何扩展asterisk的cli接口&#xff0c;本篇是它的继续&#xff0c;总结下&#xff0c;也方便我以后查阅。 大部分情况下&#xff0c;配置…

CSS中的 ',' 、''、'+'、'~'

1、群组选择器&#xff08;,&#xff09; /* 表示既h1&#xff0c;又h2 */ h1, h2 {color: red; } 2、后代选择器&#xff08;空格&#xff09; /* 表示 h1 下面的所有 span 元素&#xff0c;不管是否以 h1 为直接父元素 */ h1 span {} 3、子元素选择器&#xff08;>&#x…

避免不必要的Spring配置组件扫描

我在堆栈溢出中遇到了一个有趣的问题。 Brett Ryan有问题&#xff0c;Spring Security配置被初始化了两次。 当我查看他的代码时&#xff0c;我发现了问题所在。 让我展示显示代码。 他有相当标准的Spring应用程序&#xff08;不使用Spring Boot&#xff09;。 使用基于Spring…

正则表达式 小结

时间&#xff1a;2018年1月21日 18:29:01 用于&#xff1a;此小结是学习正则表达式的总结 正则表达式&#xff08;regular expression&#xff09;小结1. . 表示出断行外任意一个字符   ^行首   $行尾   [] 表示范围 如&#xff1a;[a-z]指a到z范围的一个字符 [\u]表…

js 之for..in、表单及事件触发

<html ><body> <script type"text/javascript">var x;var mycarsnew Array();mycars[0] "saa";mycars[1] "Va";mycars[2] "BMW";for(x in mycars)//x是变量用来指定变量&#xff0c;指定的变量可以是数组元素&…

移动端,fixed bottom问题

//不显示 .bar {position:fixed;bottom:0;z-index:99; }//显示 .bar{position:fixed;bottom:calc(90vh); /*当前屏幕高度百分比90%*/z-index:99; } 转载于:https://www.cnblogs.com/qq917937712/p/11475310.html

js 判断一个字符在字符串中出现的次数

<script type"text/javascript">var sdjh.doiwe.esd.d.ddd0sdd.d.; var n(s.split(.)).length-1; document.write(n);</script> 结果&#xff1a;6 更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.com

Spring Boot微服务的黑匣子测试是如此简单

当我需要进行原型设计&#xff0c;概念验证或在空闲时间使用一些新技术时&#xff0c;开始新项目对于Maven来说总是有点烦人。 不得不说&#xff0c;设置Maven项目并不难&#xff0c;您可以使用Maven原型。 但是原型通常是过时的。 谁想玩旧技术&#xff1f; 因此&#xff0c;我…

sharepoint ECMAScript对象模型系列

转载&#xff1a;Sharepoint学习笔记—ECMAScript对象模型系列-- 8、组与用户操作(一) http://www.cnblogs.com/wsdj-ITtech/archive/2012/06/08/2416967.html 转载于:https://www.cnblogs.com/EricLee007/archive/2012/06/08/2541636.html