uniapp小程序中实现无缝衔接滚动效果代码示例

2025-05-19 15:50

本文主要是介绍uniapp小程序中实现无缝衔接滚动效果代码示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《uniapp小程序中实现无缝衔接滚动效果代码示例》:本文主要介绍uniapp小程序中实现无缝衔接滚动效果的相关资料,该方法可以实现滚动内容中字的不同的颜色更改,并且可以根据需要进行艺术化更改和自...

组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动动画,可以根据自己的需要进行艺术化的更改需要滚动的内容,也可以自定义更改滚动速度。

<template>
  <view class="container">
    <!-- 文字滚动条 -->
    <view 
      v-for="(item, index) in scrollItems" 
      :key="'text-' + index"
      class="scroll" 
      :style="{'--t': item.duration + 's'}"
    >
      <view class="scroll-row">
        <text 
          v-for="(skill, i) in skills" 
          :key="i"
          class="skill-tag"
          @click="handleSkillClick(skill)"
        >{{ skill }}</text>
      </view>
      <view class="scroll-row">
        <text 
          v-for="(skill, i) in skills" 
          :key="i + 'copy'"
          class="skill-tag"
          @click="handleSkillClick(skill)"
        >{{ skill }}</text>
      </view>
    </view>

    <!-- 彩色方块滚动条 -->
    <view class="scroll img-box">
      <view class="scroll-row">
        <view 
          v-for="n in 9" 
          :key="n"
          class="color-box" 
          :style="{'--r': (n-1)*40}"
          @click="changeBoxColor(n)"
        >{{ n }}</view>
      </view>
      <view class="scroll-row">
        <view 
          v-for="n in 9" 
          :key="n + 'copy'"
          class="color-box" 
          :style="{'--r': (n-1)*40}"
          @click="changeBoxColor(n)"
        >{{ n }}-1</view>
      </view>
    </view>
  </view>
</template>
<script setup>
import { ref } from 'vue'

const skills = ref([
  'html', 'css', 'JavaScript', 
  'Vue', 'React', 'Figma', 'Photoshop'
])

const scrollItems = ref([
  { duration: 20 },
  { duration: 30 },
  { duration: 10 },
  { duration: 35 }
])

const handleSkillClick = (skill) => {
  uni.showToast({
    title: `点击了: ${skill}`,
    icon: 'none'
  })
}

const changeBoxColor = (n) => {
  // 在实际应用中,你可能需要找到对应的DOM元素来修改样式
  // 这里只是演示点击事件
  uni.showToast({
    title: `点击了方块 ${n}`,
    icon: 'none'
  })
}
</script>
<style>
/* 基础样式http://www.chinasem.cn */
.container {
  min-height: 100vh;
  background-color: #222;
  color: #fff;
  displaIKOfPftLBy: Flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  padding: 20px;
}

/*编程 滚动容器 */
.scroll {
  position: relative;
  display: flex;
  width: 700px;
  overflow: hidden;
  -webkit-mask-image: linear-gradient(90deg, transparent, #fff 20%, #fff 80%, transparent);
  mask-image: linear-gradient(90deg, transparent, #fff 20%, #fff php80%, transparent);
  margin: 15px 0;
}

/* 滚动行 */
.scroll-row {
  white-space: nowrap;
  will-change: transform;
}

/* 技能标签 */
.skill-tag {
  display: inline-block;
  margin: 10px;
  padding: 8px 15px;
  bajsckground-color: #333;
  border-radius: 5px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  transition: all 0.3s ease;
  box-shadow: 0 4px 8px rgba(0,0,0,0.2);
}

.skill-tag:active {
  background-color: #4caf50;
  transform: scale(1.05);
  box-shadow: 0 6px 12px rgba(0,0,0,0.3);
}

/* 彩色方块 */
.img-box {
  display: flex;
  column-gap: 10px;
}

.color-box {
  width: 150px;
  height: 150px;
  background-color: #ff3e3e;
  filter: hue-rotate(calc(var(--r) * 1deg));
  display: flex;
  justify-content: center;
  align-items: center;
  font-weight: bold;
  font-size: 1.5em;
  border-radius: 8px;
  margin: 0 10px;
  transition: all 0.5s ease;
}

.color-box:active {
  transform: rotate(15deg) scale(1.1);
  box-shadow: 0 8px 16px rgba(0,0,0,0.3);
}

/* 动画效果 */
.scroll-row:first-child {
  animation: animate var(--t) linear infinite;
  animation-delay: calc(var(--t) * -1);
}

.scroll-row:nth-child(2) {
  animation: animate2 var(--t) linear infinite;
  animation-delay: calc(var(--t) / -2);
}

@keyframes animate {
  0% { transform: translateX(100%); }
  100% { transform: translateX(-100%); }
}

@keyframes animate2 {
  0% { transform: translateX(0); }
  100% { transform: translateX(-200%); }
}

/* 响应式设计 */
@media screen and (max-width: 768px) {
  .scroll {
    width: 95vw;
  }
  
  .skill-tag {
    padding: 5px 10px;
    font-size: 0.8em;
  }
  
  .color-box {
    width: 20vw;
    height: 20vw;
    font-size: 1em;
  }
}
</style>

总结

到此这篇关于uniapp小程序中实现无缝衔接滚动效果的文章就介绍到这了,更多相关uniapp小程序无缝衔接滚动内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于uniapp小程序中实现无缝衔接滚动效果代码示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154670

相关文章

Python如何实现高效的文件/目录比较

《Python如何实现高效的文件/目录比较》在系统维护、数据同步或版本控制场景中,我们经常需要比较两个目录的差异,本文将分享一下如何用Python实现高效的文件/目录比较,并灵活处理排除规则,希望对大... 目录案例一:基础目录比较与排除实现案例二:高性能大文件比较案例三:跨平台路径处理案例四:可视化差异报

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

Java实现本地缓存的四种方法实现与对比

《Java实现本地缓存的四种方法实现与对比》本地缓存的优点就是速度非常快,没有网络消耗,本地缓存比如caffine,guavacache这些都是比较常用的,下面我们来看看这四种缓存的具体实现吧... 目录1、HashMap2、Guava Cache3、Caffeine4、Encache本地缓存比如 caff

IDEA与MyEclipse代码量统计方式

《IDEA与MyEclipse代码量统计方式》文章介绍在项目中不安装第三方工具统计代码行数的方法,分别说明MyEclipse通过正则搜索(排除空行和注释)及IDEA使用Statistic插件或调整搜索... 目录项目场景MyEclipse代码量统计IDEA代码量统计总结项目场景在项目中,有时候我们需要统计

MyBatis-Plus 与 Spring Boot 集成原理实战示例

《MyBatis-Plus与SpringBoot集成原理实战示例》MyBatis-Plus通过自动配置与核心组件集成SpringBoot实现零配置,提供分页、逻辑删除等插件化功能,增强MyBa... 目录 一、MyBATis-Plus 简介 二、集成方式(Spring Boot)1. 引入依赖 三、核心机制

MySQL设置密码复杂度策略的完整步骤(附代码示例)

《MySQL设置密码复杂度策略的完整步骤(附代码示例)》MySQL密码策略还可能包括密码复杂度的检查,如是否要求密码包含大写字母、小写字母、数字和特殊字符等,:本文主要介绍MySQL设置密码复杂度... 目录前言1. 使用 validate_password 插件1.1 启用 validate_passwo

Java高效实现Word转PDF的完整指南

《Java高效实现Word转PDF的完整指南》这篇文章主要为大家详细介绍了如何用Spire.DocforJava库实现Word到PDF文档的快速转换,并解析其转换选项的灵活配置技巧,希望对大家有所帮助... 目录方法一:三步实现核心功能方法二:高级选项配置性能优化建议方法补充ASPose 实现方案Libre

springboot整合mqtt的步骤示例详解

《springboot整合mqtt的步骤示例详解》MQTT(MessageQueuingTelemetryTransport)是一种轻量级的消息传输协议,适用于物联网设备之间的通信,本文介绍Sprin... 目录1、引入依赖包2、yml配置3、创建配置4、自定义注解6、使用示例使用场景:mqtt可用于消息发