JS——背景色的滑动效果以及输入框的状态切换效果实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 输入框的状态切换以及鼠标点击下拉框的出现
    • 1.成果图
    • 2.需求解析
    • 3.实现过程
  • 二、背景色的滑动效果
    • 1.成果图
    • 2.需求解析
    • 3.实现过程
  • 总结

前言

在之前的文章中有分享过利用HTML+CSS制作静态页面(例如前文的阿里矢量图标库官网的实现),但之前的实现过程并未涉及JS的内容,今天实现了几个小功能,其中运用到了之前所讲的知识点,在这里一并分享给大家吧~


一、输入框的状态切换以及鼠标点击下拉框的出现

1.成果图

 2.需求解析

  • 蓝色区域的效果实现——如上图所示,当用户点击蓝色区域时,下拉框呈现对应的打开或关闭状态,当鼠标点击其他区域时,该区域也会呈现关闭状态,那么如何实现呢?
  • 解决方法:在书写结构时,可将蓝色区域设置为input框 type类型选为button(具体实现过程见下文)随后利用输入框的获取/失去焦点事件进行控制。
  • 输入框的效果实现—— 可利用输入框的获取/失去焦点事件实现。

3.实现过程

HTML 结构

<!-- 搜索框 -->
        <div class="search-total-box">
            <input type="button" class="search-upbox" value="图标">
            <i class="iconfont arrow-down">&#xe657;</i>
            <!-- 下拉框 -->
            <div class="search-downbox">
                图标
            </div>
            </input>
            <div class="word">搜索图标<b>20,830,680</b></div>
            <input type="text" id="input">
        </div>

CSS样式

.search-total-box {
    width: 760px;
    height: 58px;
    line-height: 58px;
    text-align: center;
    margin: 0 auto;
    border: 1px solid rgba(34, 43, 95, .79);
    background: rgba(14, 16, 52, .5);
    border-radius: 40px;
    padding: 0 4px;
    position: relative;
    transition: all .4s;
}

.search-total-box:hover {
    border-color: #6974b3;
}

.search-upbox {
    background: #6272D6;
    width: 130px;
    height: 50px;
    line-height: 50px;
    margin-top: 3px;
    border-radius: 45px;
    border: 1px solid transparent;
    text-align: center;
    font-size: 14px;
    color: #ffffff;
    position: relative;
    left: -316px;
    top: 1px;
    outline:none;
}

.arrow-down{
    position: absolute;
    left: 100px;
    top: 2px;
    font-size: 14px;
    color: #ccc;
    transition: transform .3s, top .3s;
}

.search-downbox {
    position: absolute;
    width: 120px;
    height: 50px;
    line-height: 50px;
    box-shadow: 0 0 4px 0 #6973b3;
    border-radius: 6px 6px 4px 4px;
    background-color: #090723;
    top: 60px;
    left: 10px;
    display: none;
    color: #ffffff;
    font-size: 14px;
}

.search-total-box>#input {
    width: 590px;
    height: 44px;
    position: absolute;
    top: 7px;
    right: 28px;
    outline: none;
    background: transparent;
    border: none;
    color: #fff;
    font-size: 18px !important;
}

.search-total-box .word {
    margin-top: -58px;
    font-size: 14px;
    color: #a6a5ad;
}

.search-total-box .word>b {
    padding-left: 6px;
    color: #ff0200;
    font-weight: 400;
}

JS行为

// 设置图标按钮单击下拉框出现
// 获取按钮
let upbox = document.getElementsByClassName("search-upbox")[0];
let downbox = document.getElementsByClassName("search-downbox")[0];
let arrow = document.getElementsByClassName("arrow-down")[0];

//  设置点击事件,为upbox设置鼠标监听事件,当鼠标点击时,设置相关效果
upbox.addEventListener(
  "click",
  function () {
    if (downbox.style.display == "block") {
      downbox.style.display = "none";
      arrow.style.transform = "rotate(0deg)";
    } else {
      downbox.style.display = "block";
      arrow.style.transform = "rotate(180deg)";
    }
  },
  false
);

upbox.onblur = function () {
  downbox.style.display = "none";
  arrow.style.transform = "rotate(0deg)";
};

// 当输入框获取焦点时,预留文字消失
// 获取输入框和预留文字部分
var input = document.getElementById('input');
var word  = document.getElementsByClassName('word')[0];
input.onfocus = function( ){
  word.style.display = 'none';
}
input.onblur  = function( ){
  word.style.display = 'block';
}

二、背景色的滑动效果

1.成果图

 

2.解析

  • 当用户点击某元素时,相应的背景色以及如上图所示的红色底线也应该做相应的调整。
  • 这就要利用到鼠标的点击事件并控制该元素滑动的距离并结合全文所讲的变形的知识点即可实现该功能

3.实现过程

3.1红色背景区域实现过程

HTML结构

 <div class="box" id="red-box">
                        <ul>
                            <li>所有图标</li>
                            <li>开放图标</li>
                            <li>私有图标<i class="iconfont why">&#xe611;</i></li>
                        </ul>
                         <!-- 红色背景滑块 -->
                         <div id="cover"></div>
                    </div>

CSS样式

.box {
    width: 964px;
    height: 33px;
    margin: 12px 0px 20px;
}

.box>ul {
    width: 270px;
    height: 32px;
    background: #ddd;
    border-radius: 40px;
    display: inline-block;
    vertical-align: middle;
    position: relative;
}

.box>ul>li {
    float: left;
    width: 90px;
    height: 32px;
    line-height: 32px;
    text-align: center;
    position: relative;
    z-index: 2;
    font-size: 12px;
    color: #333;
    cursor: pointer;
    transition: color .2s ease-in-out;
}
.box>ul>li:first-child{
    color: #fff;
}
#cover {
    position: relative;
    left: 0;
    top:-32px;
    width: 90px;
    height: 32px;
    background-color: #ff0000;
    z-index: 1;
    border-radius: 17px;
    cursor: auto;
    transition: left .1s ease-in-out;
}

.why {
    margin-left: 5px;
    color: #999;
    font-size: 30px;
    font-weight: bold;
    vertical-align: middle;
}
// 我的资源区域点击切换效果实现
// 获取每一个li
var active0 = document.querySelectorAll('.project-left li')[0];
var active1 = document.querySelectorAll('.project-left li')[1];
var active2 = document.querySelectorAll('.project-left li')[2];
// 获取底部红色的线条
var line = document.getElementById('red-line');

// 为每一个 li 绑定单击事件
active0.onclick = function( ){
    active0.className = 'my-source';
    line.style.left = '35px';
}

active1.onclick = function( ){
    active1.className = 'my-source';
    line.style.left = '130px';
}

active2.onclick = function( ){
    active2.className = 'my-source';
    line.style.left = '219px';
}

3.2我的资源下方滑动条

HTML结构

 <!-- 项目与资源区域 -->
                        <div class="project-left">
                            <ul>
                                <li class="my-source">
                                    <a href="#">我的资源</a>
                                </li>
                                <li  class="my-source">
                                    <a href="#">我的收藏</a>
                                </li>
                                <li  class="my-source">
                                    <a href="#">我的项目</a>
                                </li>
                            </ul>
                            <!-- 底部红色线条 -->
                           <span id="red-line"></span>
                        </div>

CSS样式


.project-left {
    width: 276px;
    height: 50px;
    position: relative;
}

.project-left li {
    float: left;
    width: 56px;
    height: 50px;
    line-height: 50px;
    padding: 0 8px;
    text-align: center;
    margin-right: 20px;
}

.project-left li:hover a {
    color: #fff;
}

#red-line {
    width: 72px;
    height: 2px;
    background: red;
    display: block;
    z-index: 10;
    transition: width .1s ease-in-out;
    position: absolute;
    bottom: -1px;
    left: 35px;
    transform: translate(-50%, 0);
}

.project-left li:first-child a {
    color: #fff;
}

.project-left li>a {
    font-size: 14px;
    color: #a6a5ad;
}

JS行为

// 红色图标的背景色切换效果

// 获取红色图标下的所有子元素
let list0 = document.querySelectorAll("#red-box li")[0];
let list1 = document.querySelectorAll("#red-box li")[1];
let list2 = document.querySelectorAll("#red-box li")[2];

// 获取红色滑块
let cover = document.getElementById("cover");

// 获取问号小图标
let why = document.getElementsByClassName('why')[0];
console.log(why);
// 为每一个li添加点击事件
list0.onclick = function () {
  cover.style.left = "0";
  list0.style.color = "#fff";
  list1.style.color = "#333";
  list2.style.color = "#333";
  why.style.color = '#999';
};
list1.onclick = function () {
  cover.style.left = "90px";
  list1.style.color = "#fff";
  list0.style.color = "#333";
  list2.style.color = "#333";
  why.style.color = '#999';
};
list2.onclick = function () {
  cover.style.left = "180px";
  list2.style.color = "#fff";
  list0.style.color = "#333";
  list1.style.color = "#333";
  why.style.color = '#fff';
};

总结

ok,写到这里今天的分享也就到此结束啦,今天天气很好,本人很开心,如果你看到这里也记得要笑一笑哦,最后诚挚祝福屏幕前的你健康幸福、平安喜乐。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340