使用js原生实现年份轮播选择效果实例


Posted in Javascript onJanuary 12, 2021

前言

用js实现一个年份轮换选择效果。废话不多说,看图:

使用js原生实现年份轮播选择效果实例

一、思路是什么?

  • 布局: 左右箭头使用实体字符 < 和 > 年份5个span。使用用flex布局横向排列。
  • js逻辑:(注:年份数据为number数组)
    • a> . 默认展示年份数据前5个。
    • b>. firstIndex记录要显示的5个年份的起始索引。点击右侧箭头+1,直到firstIndex+5 刚好等于年份数组长度,不在递增。点击左侧箭头-1,直到firstIndex为0,不在递减。初始值为0。
    • c>.selectedIndex记录当前点击选中的年份索引。默认显示第一个即2021。初始值0。
    • d>.firstIndex值发生变化,获取firstIndex,firstIndex+1,firstIndex+2…firstIndex+4对应的年份,渲染到页面。并且这5个索引中某一个和selectedIndex相等,说明选中的年份,刚好在当前页面显示的年份当中。所以,与之相等的index对应的span添加选中样式,其他4个span移除选中样式。
  • css:左右箭头逻辑,默认全部添加可点击样式:firstIndex=0,移除左可点击样式,firstIndex+5=年份数组长度,移除右可点击样式。

二、全部代码

1. html

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <link rel="stylesheet" href="index.css" rel="external nofollow" type="text/css"/>
 <script type="text/javascript" src="echarts.min.js"></script>
 <script type="text/javascript" src="index.js"></script>
</head>
<body>
<div class="container">

 <div id="left" class="arrow_left" onclick="clickBefore()" style="cursor:default" unselectable="on" onselectstart="return false;">
 <span><</span>
 </div>
 <div id="wrap" class="wrap">
 <span onclick="selected(this)">1</span>
 <span onclick="selected(this)">2</span>
 <span onclick="selected(this)">3</span>
 <span onclick="selected(this)">4</span>
 <span onclick="selected(this)">5</span>
 </div>
 <div id="right" class="arrow_right arrow_active" onclick="clickNext()" style="cursor:default" unselectable="on" onselectstart="return false;">
 <span>></span>
 </div>

</div>

<div class="content" id="content">

</div>
</body>
</html>

2.js

代码如下:

window.onload = function () {
 //首次渲染列表
 initList(firstIndex);
};

let yearArr = [2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021];
yearArr.reverse();

//起始索引
let firstIndex = 0;
//选中索引,默认选中第一个
let selectedIndex = 0;


/**
 * 初始化列表
 */
function initList(firstIndex) {

 //渲染页面span列表
 let spanList = document.getElementById('wrap').getElementsByTagName('span');
 for (let i = 0; i < spanList.length; i++) {
 let index = firstIndex + i;
 let span = spanList[i];
 span.innerText = yearArr[index];

 //选中样式添加和移除
 if (index === selectedIndex) {
  span.classList.add('active');
 } else {
  span.classList.remove('active')
 }
 }
 //页面内容显示值
 document.getElementById('content').innerText = '当前选中年份:' + yearArr[selectedIndex];
}

/**
 * 下一页
 */
function clickNext(div) {
 if (firstIndex + 5 < yearArr.length) {
 firstIndex = firstIndex + 1;
 initList(firstIndex)
 }
 arrowActive();
}

/*
* 上一页
 */
function clickBefore(div) {
 if (firstIndex > 0) {
 firstIndex = firstIndex - 1;
 initList(firstIndex)
 }
 arrowActive();
}

/**
 * 选中
 */
function selected(span) {
 let value = span.innerText;
 let index = yearArr.findIndex((el) => {
 return el + "" === value;
 })
 selectedIndex = index !== -1 ? index : 0;
 initList(firstIndex);
}

/**
 * 左右箭头激活
 * firstIndex = 0: 右激活 左不
 * firstIndex = length-5:左激活 右不
 * 其他:全激活
 */
function arrowActive() {
 let left = document.getElementById('left')
 let right = document.getElementById('right')
 left.classList.add('arrow_active');
 right.classList.add('arrow_active');
 if (firstIndex === 0) {
 left.classList.remove('arrow_active');
 } else if (firstIndex === yearArr.length - 5) {
 right.classList.remove('arrow_active');
 }
}

2.css

代码如下:

body{
 margin-top: 80px;
}
.container {

 display: flex;
 justify-content: center;
 align-items: center;
 margin: 10px;
}

.wrap {
 height: 40px;
 z-index: 1;
 color: black;
 display: flex;
 flex: 1;
 background: rgba(155,226,219,0.5);
 border-radius: 20px;
 margin-left: 20px;
 margin-right: 20px;
}

.wrap span {
 flex: 1;
 text-align: center;
 height: 40px;
 line-height: 40px;
 border-radius: 20px;

}

.active{
 background: #1abc9c;
 color:#fff;
}



.arrow_left {
 left: 10px;
 color: green;
 padding: 0px 14px;
 border-radius: 50%;
 font-size: 30px;
 z-index: 2;
}


.arrow_right {
 right: 10px;
 color: green;
 padding: 0px 14px;
 border-radius: 50%;
 font-size: 30px;
 z-index: 2;
}
.arrow_active{
 color: blue;
}

.content{
 margin-left: 30px;
}

总结

每天记录一点,从小小菜鸟变小菜鸟!!!

到此这篇关于使用js原生实现年份轮播选择效果的文章就介绍到这了,更多相关js原生实现年份轮播选择内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript 参考教程
Dec 29 Javascript
Span元素的width属性无效果原因及解决方案
Jan 15 Javascript
一个js的tab切换效果代码[代码分离]
Apr 11 Javascript
JQuery 文本框使用小结
May 22 Javascript
用jquery写的菜单从左往右滑动出现
Apr 11 Javascript
AngularJs Understanding the Model Component
Sep 02 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
Jul 17 Javascript
基于datepicker定义自己的angular时间组件的示例
Mar 14 Javascript
在Vue项目中使用snapshot测试的具体使用
Apr 16 Javascript
Vue事件修饰符native、self示例详解
Jul 09 Javascript
jQuery中DOM操作原则实例分析
Aug 01 jQuery
vue组件是如何解析及渲染的?
Jan 13 Vue.js
Vue过滤器,生命周期函数和vue-resource简单介绍
Jan 12 #Vue.js
详解template标签用法(含vue中的用法总结)
Jan 12 #Vue.js
js动态生成表格(节点操作)
Jan 12 #Javascript
Vue中ref和$refs的介绍以及使用方法示例
Jan 11 #Vue.js
JS addEventListener()和attachEvent()方法实现注册事件
Jan 11 #Javascript
JS removeAttribute()方法实现删除元素的某个属性
Jan 11 #Javascript
详解ES6 中的Object.assign()的用法实例代码
Jan 11 #Javascript
You might like
PHP开启opcache提升代码性能
2015/04/26 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
laravel 多图上传及图片的存储例子
2019/10/14 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
PHP Pipeline 实现中间件的示例代码
2020/04/26 PHP
javascript 操作Word和Excel的实现代码
2009/10/26 Javascript
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
2015/03/27 Javascript
js代码实现随机颜色的小方块
2015/07/30 Javascript
js实现继承的5种方式
2015/12/01 Javascript
javascript事件委托的用法及其好处简析
2016/04/04 Javascript
javascript HTML5 canvas实现打砖块游戏
2020/06/18 Javascript
Highcharts入门之基本属性
2016/08/02 Javascript
js倒计时小实例(多次定时)
2016/12/08 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
2017/02/22 Javascript
Express + Session 实现登录验证功能
2017/09/08 Javascript
jQuery插件artDialog.js使用与关闭方法示例
2017/10/09 jQuery
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
Egg.js 中 AJax 上传文件获取参数的方法
2018/10/10 Javascript
jQuery的ztree仿windows文件新建和拖拽功能的实现代码
2018/12/05 jQuery
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
对python中Librosa的mfcc步骤详解
2019/01/09 Python
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
Python imageio读取视频并进行编解码详解
2019/12/10 Python
python 追踪except信息方式
2020/04/25 Python
python golang中grpc 使用示例代码详解
2020/06/03 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
HTML5触摸事件(touchstart、touchmove和touchend)的实现
2020/05/08 HTML / CSS
碧欧泉法国官网:Biotherm法国
2019/10/23 全球购物
毕业生自我鉴定
2013/11/05 职场文书
刚毕业大学生自荐信范文
2014/02/20 职场文书
2014乡镇“三八”国际劳动妇女节活动总结
2014/03/01 职场文书
大型演出策划方案
2014/05/28 职场文书
2015年中秋节演讲稿
2015/03/20 职场文书