使用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 相关文章推荐
jQuery 源代码显示控件 (Ajax加载方式).
May 18 Javascript
一些经常会用到的Javascript检测函数
May 31 Javascript
JavaScript中的单引号和双引号报错的解决方法
Sep 01 Javascript
javascript显式类型转换实例分析
Apr 25 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
Aug 04 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
Aug 28 Javascript
基于 Bootstrap Datetimepicker 联动
Aug 03 Javascript
angularjs的单选框+ng-repeat的实现方法
Sep 12 Javascript
vue实现同一个页面可以有多个router-view的方法
Sep 20 Javascript
详解关于element el-button使用$attrs的一个注意要点
Nov 09 Javascript
详解vue中$nextTick和$forceUpdate的用法
Dec 11 Javascript
javascript函数式编程基础
Sep 15 Javascript
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
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
浅析PHP Socket技术
2013/08/02 PHP
PHP Session机制简介及用法
2014/08/19 PHP
PHP简单获取视频预览图的方法
2015/03/12 PHP
深入讲解PHP的Yii框架中的属性(Property)
2016/03/18 PHP
php 微信公众平台开发模式实现多客服的实例代码
2016/11/07 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
2019/04/09 PHP
深入理解javascript严格模式(Strict Mode)
2014/11/28 Javascript
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
简介AngularJS的HTML DOM支持情况
2015/06/17 Javascript
canvas实现流星雨的背景效果
2017/01/13 Javascript
AngularJS的Filter的示例详解
2017/03/07 Javascript
Vue 自定义动态组件实例详解
2018/03/28 Javascript
vue实现微信分享功能
2018/11/28 Javascript
jQuery实现回到顶部效果
2020/10/19 jQuery
用smtplib和email封装python发送邮件模块类分享
2014/02/17 Python
介绍Python中的fabs()方法的使用
2015/05/14 Python
python脚本内运行linux命令的方法
2015/07/02 Python
python进行两个表格对比的方法
2018/06/27 Python
解决python3捕获cx_oracle抛出的异常错误问题
2018/10/18 Python
Python 读取 YUV(NV12) 视频文件实例
2019/12/09 Python
python 实现将list转成字符串,中间用空格隔开
2019/12/25 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
2020/09/28 Python
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
信息技术专业个人自我评价
2013/12/11 职场文书
校友会欢迎辞
2014/01/13 职场文书
小学社会实践活动总结
2014/07/03 职场文书
日语专业求职信
2014/07/04 职场文书
小学标准化建设汇报材料
2014/08/16 职场文书
爱的奉献演讲稿
2014/09/10 职场文书
简易离婚协议书范本
2014/10/24 职场文书
单位接收函格式
2015/01/30 职场文书
2015年感恩父亲节演讲稿
2015/03/19 职场文书
Android开发实现极为简单的QQ登录页面
2022/04/24 Java/Android