前端内容黑白处理、轮播图、奇妙的头像特效

news2025/5/29 8:11:05

1、内容黑白处理

(1)filter:滤镜

可以把包裹的区域中每一个像素点,经过固定的算法转换成另一种颜色来呈现

(2)grayscale:灰阶滤镜

  • 取值范围:0~1
  • 取0:原图
  • 去1:完全黑白
filter: grayscale(1)

(3)hue-rotate:阴间滤镜

filter: hue-rotate(45deg);

2、轮播图

代码示例用较原始的方式实现

(1)快速编写标签

div.item*4>a>img[src=./img/$.jpg]
<div class="item"><a href=""><img src="./img/1.jpg" alt=""></a></div>
<div class="item"><a href=""><img src="./img/2.jpg" alt=""></a></div>
<div class="item"><a href=""><img src="./img/3.jpg" alt=""></a></div>
<div class="item"><a href=""><img src="./img/4.jpg" alt=""></a></div>

(2)静态轮播图

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    .container {
      width: 500px;
      height: 300px;
      margin: 10px auto;
      overflow: hidden;
      position: relative;
    }

    .carousel {
      width: 100%;
      height: 100%;
      display: flex;
      transition: 0.5s;
      /* css3动画效果 */
    }

    .container .carousel img {
      width: 500px;
      height: 300px;
    }

    .indicator {
      position: absolute;
      bottom: 10px;
      left: 50%;
      transform: translateX(-50%);
      /* css3横向偏移,50%:元素自身的一半 */
      display: flex;
      /* 边框 */
      /* outline: 1px solid #fff; */
    }

    .indicator span {
      width: 20px;
      height: 20px;
      border: 2px solid #c466ef;
      border-radius: 50%;
      margin: 0 3px;
    }

    .indicator span.active {
      background-color: #c466ef;
      border-color: #c466ef;
    }
  </style>
</head>

<body>
  <div class="container">
    <!-- 轮播图 -->
    <div class="carousel">
      <div class="item">
        <a href=""><img src="./img/1.jpg" alt="" /></a>
      </div>
      <div class="item">
        <a href=""><img src="./img/2.jpg" alt="" /></a>
      </div>
      <div class="item">
        <a href=""><img src="./img/3.jpg" alt="" /></a>
      </div>
      <div class="item">
        <a href=""><img src="./img/4.jpg" alt="" /></a>
      </div>
    </div>
    <!-- 指示器 -->
    <div class="indicator">
      <span class="active"></span><span></span><span></span><span></span>
    </div>
  </div>
  <script>
    var doms = {
      carousel: document.querySelector(".carousel"),
      indicators: document.querySelectorAll(".indicator span"),
    };

    /**
     * 移动轮播图到第几个板块
     * @param {Number} index 板块的索引
     */
    function moveTo(index) {
      curIndex = index;
      doms.carousel.style.transform = `translateX(-${index}00%)`;
      // 去除当前选中的指示器
      var active = document.querySelector(".indicator span.active");
      active.classList.remove("active");
      // 重新设置要选中的指示器
      doms.indicators[index].classList.add("active");
    }

    // 绑定指示器点击事件
    doms.indicators.forEach(function (item, index) {
      item.onclick = function () {
        moveTo(index);
      };
    });
  </script>
</body>

</html>

(3)定时器轮播

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    .container {
      width: 500px;
      height: 300px;
      margin: 10px auto;
      overflow: hidden;
      position: relative;
    }

    .carousel {
      width: 100%;
      height: 100%;
      display: flex;
      transition: 0.5s;
      /* css3动画效果 */
    }

    .container .carousel img {
      width: 500px;
      height: 300px;
    }

    .indicator {
      position: absolute;
      bottom: 10px;
      left: 50%;
      transform: translateX(-50%);
      /* css3横向偏移,50%:元素自身的一半 */
      display: flex;
      /* 边框 */
      /* outline: 1px solid #fff; */
    }

    .indicator span {
      width: 20px;
      height: 20px;
      border: 2px solid #c466ef;
      border-radius: 50%;
      margin: 0 3px;
    }

    .indicator span.active {
      background-color: #c466ef;
      border-color: #c466ef;
    }
  </style>
</head>

<body>
  <div class="container">
    <!-- 轮播图 -->
    <div class="carousel">
      <div class="item">
        <a href=""><img src="./img/1.jpg" alt="" /></a>
      </div>
      <div class="item">
        <a href=""><img src="./img/2.jpg" alt="" /></a>
      </div>
      <div class="item">
        <a href=""><img src="./img/3.jpg" alt="" /></a>
      </div>
      <div class="item">
        <a href=""><img src="./img/4.jpg" alt="" /></a>
      </div>
    </div>
    <!-- 指示器 -->
    <div class="indicator">
      <span class="active"></span><span></span><span></span><span></span>
    </div>
  </div>
  <script>
    var doms = {
      carousel: document.querySelector(".carousel"),
      indicators: document.querySelectorAll(".indicator span"),
    };
    var curIndex = 0,
      timer;

    /**
     * 移动轮播图到第几个板块
     * @param {Number} index 板块的索引
     */
    function moveTo(index) {
      curIndex = index;
      doms.carousel.style.transform = `translateX(-${index}00%)`;
      // 去除当前选中的指示器
      var active = document.querySelector(".indicator span.active");
      active.classList.remove("active");
      // 重新设置要选中的指示器
      doms.indicators[index].classList.add("active");
    }

    // 绑定指示器点击事件
    doms.indicators.forEach(function (item, index) {
      item.onclick = function () {
        moveTo(index);
      };
    });

    // 定时器自动轮播
    function autoPlay() {
      timer = setInterval(function () {
        if (curIndex == doms.indicators.length - 1) {
          curIndex = 0;
        } else {
          curIndex++;
        }
        moveTo(curIndex);
      }, 2000);
    }
    autoPlay()
  </script>
</body>

</html>

(4)鼠标移入移出

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    .container {
      width: 500px;
      height: 300px;
      margin: 10px auto;
      overflow: hidden;
      position: relative;
    }

    .carousel {
      width: 100%;
      height: 100%;
      display: flex;
      transition: 0.5s;
      /* css3动画效果 */
    }

    .container .carousel img {
      width: 500px;
      height: 300px;
    }

    .indicator {
      position: absolute;
      bottom: 10px;
      left: 50%;
      transform: translateX(-50%);
      /* css3横向偏移,50%:元素自身的一半 */
      display: flex;
      /* 边框 */
      /* outline: 1px solid #fff; */
    }

    .indicator span {
      width: 20px;
      height: 20px;
      border: 2px solid #c466ef;
      border-radius: 50%;
      margin: 0 3px;
    }

    .indicator span.active {
      background-color: #c466ef;
      border-color: #c466ef;
    }
  </style>
</head>

<body>
  <div class="container">
    <!-- 轮播图 -->
    <div class="carousel">
      <div class="item">
        <a href=""><img src="./img/1.jpg" alt="" /></a>
      </div>
      <div class="item">
        <a href=""><img src="./img/2.jpg" alt="" /></a>
      </div>
      <div class="item">
        <a href=""><img src="./img/3.jpg" alt="" /></a>
      </div>
      <div class="item">
        <a href=""><img src="./img/4.jpg" alt="" /></a>
      </div>
    </div>
    <!-- 指示器 -->
    <div class="indicator">
      <span class="active"></span><span></span><span></span><span></span>
    </div>
  </div>
  <script>
    var doms = {
      carousel: document.querySelector(".carousel"),
      indicators: document.querySelectorAll(".indicator span"),
    };
    var curIndex = 0,
      timer;

    /**
     * 移动轮播图到第几个板块
     * @param {Number} index 板块的索引
     */
    function moveTo(index) {
      curIndex = index;
      doms.carousel.style.transform = `translateX(-${index}00%)`;
      // 去除当前选中的指示器
      var active = document.querySelector(".indicator span.active");
      active.classList.remove("active");
      // 重新设置要选中的指示器
      doms.indicators[index].classList.add("active");
    }

    // 绑定指示器点击事件
    doms.indicators.forEach(function (item, index) {
      item.onclick = function () {
        moveTo(index);
      };
    });

    // 定时器自动轮播
    function autoPlay() {
      timer = setInterval(function () {
        if (curIndex == doms.indicators.length - 1) {
          curIndex = 0;
        } else {
          curIndex++;
        }
        moveTo(curIndex);
      }, 2000);
    }
    autoPlay()

    doms.carousel.onmouseover = function () {
      clearInterval(timer);
    }
    doms.carousel.onmouseout = function () {
      autoPlay();
    }
  </script>
</body>

</html>

3、奇妙的头像特效

(1)初始化代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    body {
      padding: 0;
      margin: 0;
      min-height: 100vh;
      display: grid;
      place-content: center;
      background: #e8e4cc;
      margin-top: -200px;
    }
    img {
      --s: 200px;
      --c1: #c82942;
      --c2: #ecd878;

      width: var(--s);
      height: var(--s);
      cursor: pointer;
      transition: 0.5s;
    }
    img:hover {
      transform: scale(1.35);
    }
  </style>
</head>
<body>
  <div>
    <img src="./img/头像.png" alt="">
  </div>
</body>
</html>

(2)背景、背景边框

①背景渐变
background: radial-gradient(var(--c2), var(--c1));

②配置比例,形成背景边框
  • 没有设置100%:解决背景与背景边框出现锯齿
--b: 5px;

background: radial-gradient(
  circle closest-side, 
  var(--c2) calc(99% - var(--b)), 
  var(--c1) calc(100% - var(--b)) 99%,
  transparent
);

③保持背景不放大
img {
  --s: 200px;
  --c1: #c82942;
  --c2: #ecd878;
  --b: 5px;
  --f: 1;

  transform: scale(var(--f));
  width: var(--s);
  height: var(--s);
  cursor: pointer;
  transition: 0.5s;
  /* ①背景渐变 */
  background: radial-gradient(
    circle closest-side, 
    var(--c2) calc(99% - var(--b)), 
    var(--c1) calc(100% - var(--b)) 99%,
    transparent
  )
  no-repeat center / calc(100% / var(--f));
}

img:hover {
  --f: 1.35;
}

(3)外边框

①绘制外边框
outline: var(--b) solid var(--c1);
border-radius: 0 0 50% 50%;
outline-offset: calc(0px - var(--b));

②外边框内缩
outline-offset: calc((1 / var(--f) - 1) * var(--s) / 2 - var(--b));

③顶部线被遮挡
  • padding-top
  • border-radius设置大些
  • content-box:因为padding-top导致整个背景偏移,所以要加这个属性
background: radial-gradient(
  circle closest-side, 
  var(--c2) calc(99% - var(--b)), 
  var(--c1) calc(100% - var(--b)) 99%,
  transparent
)
content-box no-repeat center / calc(100% / var(--f));
outline: var(--b) solid var(--c1);
border-radius: 0 0 999px 999px;
outline-offset: calc((1 / var(--f) - 1) * var(--s) / 2 - var(--b));
padding-top: calc(var(--s) / 5);

(4)蒙层

①蒙层一
--bgOption: content-box no-repeat center / calc(100% / var(--f));

background: radial-gradient(
  circle closest-side, 
  var(--c2) calc(99% - var(--b)), 
  var(--c1) calc(100% - var(--b)) 99%,
  transparent
) var(--bgOption);
mask: radial-gradient(
  circle closest-side, 
  #000 99%,
  transparent
) var(--bgOption);

②蒙层二
mask: linear-gradient(#000 0 0) no-repeat 50% calc(10px - (1 / var(--f) - 1) * var(--s) / 2 - var(--b)) / calc(100% / var(--f) - 3 * var(--b)) 50%,radial-gradient(
  circle closest-side, 
  #000 99%,
  transparent
) var(--bgOption);

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

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

相关文章

Git - .gitignore 文件

一、.gitignore 文件介绍 在使用 Git 进行版本控制时&#xff0c;.gitignore 文件是一个非常重要的配置文件&#xff0c;用于告诉 Git 哪些文件或目录不需要被追踪和提交到版本库中。合理使用 .gitignore 文件可以避免提交不必要的文件&#xff0c;如临时文件、编译生成的文件…

如何通过API接口实现自动化上货跨平台铺货?商品采集|商品上传实现详细步骤

一、引言&#xff1a;跨平台铺货的技术挑战与 API 价值 在电商多平台运营时代&#xff0c;商家需要将商品同步上架至淘宝、京东、拼多多、亚马逊、Shopee 等多个平台&#xff0c;传统手动铺货模式存在效率低下&#xff08;单平台单商品上架需 30-60 分钟&#xff09;、数据一致…

《三维点如何映射到图像像素?——相机投影模型详解》

引言 以三维投影介绍大多比较分散&#xff0c;不少小伙伴再面对诸多的坐标系转换中容易弄混&#xff0c;特别是再写代码的时候可能搞错&#xff0c;所有这篇文章帮大家完整的梳理3D视觉中的投影变换的全流程&#xff0c;一文弄清楚这个过程&#xff0c;帮助大家搞清坐标系转换…

零基础设计模式——结构型模式 - 适配器模式

第三部分&#xff1a;结构型模式 - 适配器模式 (Adapter Pattern) 欢迎来到结构型模式的第一站&#xff01;结构型模式关注的是如何将类或对象组合成更大的结构&#xff0c;同时保持结构的灵活性和效率。适配器模式是其中非常实用的一个&#xff0c;它能帮助我们解决接口不兼容…

WordPress多语言插件安装与使用教程

WordPress多语言插件GTranslate的使用方法 在wordpress网站后台搜索多语言插件GTranslate并安装&#xff0c;安装完成、用户插件后开始设置&#xff0c;以下为设置方法&#xff1a; 1、先在后台左侧找到Gtranslate&#xff0c;进入到设置界面 2、选择要显示的形式&#xff0c…

欣佰特科技|SenseGlove Nova2 力反馈数据手套:助力外科手术训练的精准触觉模拟

在医疗科技持续发展的背景下&#xff0c;虚拟现实&#xff08;VR&#xff09;技术正在改变外科手术培训的方式&#xff0c;而 SenseGlove Nova2 力反馈数据手套 在这一领域发挥着重要作用。 SenseGlove Nova2 力反馈数据手套 与 VirtualiSurg 手术模拟系统深度结合。其手部追踪…

网络安全-等级保护(等保) 3-2-2 GB/T 28449-2019 第7章 现场测评活动/第8章 报告编制活动

################################################################################ GB/T 28449-2019《信息安全技术 网络安全等级保护测评过程指南》是规定了等级测评过程&#xff0c;是纵向的流程&#xff0c;包括&#xff1a;四个基本测评活动:测评准备活动、方案编制活…

IAM角色访问AWS RDS For MySQL

IAM角色访问AWS RDS For MySQL Tips: 写这篇文章&#xff0c;主要是用作记录&#xff1b;在AWS配置IAM RDS 角色权限访问&#xff0c;官方文档不怎么全&#xff0c;踩了一些坑… AWS云上配置 开启IAM身份验证 登录AWS控制台搜索并进入Databases管理页面选择数据库实例&#x…

Karakeep | 支持Docker/NAS 私有化部署!稍后阅读工具告别云端依赖,让知识收藏更有序

Karakeep 介绍 Karakeep&#xff08;以前的 Hoarder&#xff09;是一款开源的“Bookmark Everything”应用程序&#xff0c;一款基于 AI 驱动的开源书签管理工具&#xff0c;专为解决传统浏览器书签管理中的混乱问题而设计。其核心目标是通过智能化技术帮助用户高效整理、检索和…

RV1126+FFMPEG多路码流监控项目大体讲解

一.项目介绍&#xff1a; 本项目采用的是易百纳RV1126开发板和CMOS摄像头&#xff0c;使用的推流框架是FFMPEG开源项目。这个项目的工作流程如下(如上图)&#xff1a;通过采集摄像头的VI模块&#xff0c;再通过硬件编码VENC模块进行H264/H265的编码压缩&#xff0c;并把压缩后的…

el-dialog 组件 多层嵌套 被遮罩问题

<el-dialog title"提示" :visible.sync"dialogBindUserVisible" width"30%" append-to-body :before-close"handleClose"> <span>这是一段信息</span> <span slot"footer" class"dialog-footer&q…

探秘谷歌Gemini:开启人工智能新纪元

一、引言 在人工智能的浩瀚星空中&#xff0c;每一次重大模型的发布都宛如一颗璀璨新星闪耀登场&#xff0c;而谷歌 Gemini 的亮相&#xff0c;无疑是其中最为耀眼的时刻之一。它的出现&#xff0c;犹如在 AI 领域投下了一颗重磅炸弹&#xff0c;引发了全球范围内的广泛关注与热…

wordcount在集群上的测试

1.将louts.txt文件从cg计算机复制到master节点上面&#xff0c;存放在/usr/local/hadoop 需要输入密码&#xff1a;83953588abc scp /root/IdeaProjects/mapReduceTest/lotus.txt root172.18.0.2:/usr/local/hadoop /WordCountTest/input 2.将lotus.txt文件从master这台机器…

OpenCV CUDA模块图像过滤------创建一个 Sobel 滤波器函数createSobelFilter()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数用于创建一个 Sobel 滤波器&#xff0c;用于在 GPU 上进行边缘检测。它基于图像的梯度计算&#xff1a; dx 表示对 x 方向求导的阶数&…

PDF 转 JPG 图片小工具:CodeBuddy 助力解决转换痛点

本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 前言 在数字化办公与内容创作的浪潮中&#xff0c;将 PDF 文件转换为 JPG 图片格式的需求日益频繁。无论是学术文献中的图表提取&#xff0c;还是宣传资料的视觉化呈现&am…

VisionPro 与 C# 联合编程:相机连接实战指南

在工业视觉检测与自动化领域&#xff0c;康耐视&#xff08;Cognex&#xff09;的 VisionPro 是一款功能强大的视觉开发工具&#xff0c;而 C# 凭借其简洁性与高效性&#xff0c;成为许多开发者的首选编程语言。本文将详细介绍如何通过 C# 与 VisionPro 联合编程实现相机连接&a…

论文阅读:Next-Generation Database Interfaces:A Survey of LLM-based Text-to-SQL

地址&#xff1a;Next-Generation Database Interfaces: A Survey of LLM-based Text-to-SQL 摘要 由于用户问题理解、数据库模式解析和 SQL 生成的复杂性&#xff0c;从用户自然语言问题生成准确 SQL&#xff08;Text-to-SQL&#xff09;仍是一项长期挑战。传统的 Text-to-SQ…

OS面试篇

用户态和内核态 用户态和内核态的区别&#xff1f; 内核态和用户态是操作系统中的两种运行模式。它们的主要区别在于权限和可执行的操作&#xff1a; 内核态&#xff08;Kernel Mode&#xff09;&#xff1a;在内核态下&#xff0c;CPU可以执行所有的指令和访问所有的硬件资…

FFMPEG-FLV-MUX编码

一、流程图 二、结构体 1 .AVOutputFormat 一、核心功能与作用 封装格式描述 AVOutputFormat保存了输出容器格式的元数据&#xff0c;包括&#xff1a; 短名称&#xff08;name&#xff09;&#xff1a;如flv、mp4&#xff1b;易读名称&#xff08;long_name&#xff09;&…

React vs Vue.js:选哪个框架更适合你的项目?

摘要 前端开发江湖里&#xff0c;React 和 Vue.js 堪称两大 “顶流” 框架&#xff0c;不少开发者在选择时都犯了难。用 React 吧&#xff0c;听说它性能超强&#xff0c;可学习曲线也陡峭&#xff1b;选 Vue.js&#xff0c;有人夸它上手快&#xff0c;但又担心功能不够强大。…