如何实现响应式 jQuery Marquee:移动端初始化,桌面端销毁


如何实现响应式 jquery marquee:移动端初始化,桌面端销毁

本教程详细介绍了如何使用 jQuery.Marquee 插件实现响应式滚动效果,确保其在移动设备上初始化并在桌面设备上销毁。文章阐述了传统方法中可能遇到的问题,并提供了一种健壮的解决方案,利用 `window.matchMedia` 进行媒体查询以及 `data-*` 属性进行插件状态管理,从而避免重复初始化和销毁,优化性能并提升用户体验。

在现代网页设计中,响应式布局是不可或缺的一部分。对于一些特定的UI组件,如跑马灯(Marquee)效果,我们可能希望它们只在特定的屏幕尺寸下激活,例如在移动设备上启用,而在桌面设备上禁用。本教程将指导您如何使用 jQuery.Marquee 插件实现这一功能,并提供一个健壮的解决方案来避免常见的陷阱。

响应式 Marquee 的挑战

直接监听 window 的 resize 事件并根据当前窗口宽度来初始化或销毁 Marquee 插件,可能会导致一些问题:

  1. 重复初始化/销毁: 如果不跟踪插件的状态,每次窗口大小跨越阈值时,都可能尝试对一个已经初始化过的元素再次初始化,或者对一个未初始化的元素进行销毁操作,这可能导致插件崩溃或不按预期工作。
  2. 性能问题: resize 事件会频繁触发。在每次事件中都进行复杂的DOM操作或插件初始化,会消耗大量资源,影响页面性能。
  3. 不准确的宽度判断: 在 resize 事件中直接获取 $(window).width() 可能会在某些情况下不够精确,尤其是在处理浏览器缩放或设备像素比时。

解决方案:matchMedia 与状态管理

为了解决上述挑战,我们将采用以下两种核心技术:

  1. window.matchMedia(): 这是一个现代浏览器API,用于执行媒体查询。它比反复查询 $(window).width() 更高效,因为它只在媒体查询状态发生变化时才通知我们。
  2. *`data-属性:** 我们将使用一个自定义的data-*属性(例如data-marqueeinit`)来跟踪 Marquee 插件是否已经在目标元素上初始化。这有助于防止重复操作。

实现步骤

1. 引入必要的库

首先,确保您的页面中已引入 jQuery 库和 jQuery.Marquee 插件。建议将它们放在

SONIFY.io SONIFY.io

设计和开发音频优先的产品和数据驱动的解决方案

SONIFY.io 75 查看详情 SONIFY.io 标签的末尾,或者使用 defer 属性加载脚本。
<!-- 引入 jQuery 库 -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<!-- 引入 jQuery.Marquee 插件 -->
<script src="https://cdn.jsdelivr.net/npm/jquery.marquee@1.6.0/jquery.marquee.min.js"></script>

2. HTML 结构

为您的 Marquee 内容准备一个容器元素。这里我们使用一个带有 tt-services-listing 类的 div 元素作为示例。

<div class="tt-services-listing">
  这是您希望滚动的文本内容。它会根据屏幕宽度在移动端滚动,在桌面端停止。
  Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</div>

3. J*aScript 逻辑

核心逻辑将封装在一个函数中,该函数在页面加载时和窗口大小调整时被调用。

jQuery($ => { // 确保 DOM 加载完毕,并为 jQuery 提供 $ 别名

  // Marquee 插件的配置选项
  const marqueeOptions = {
    duration: 20000, // 滚动持续时间(毫秒)
    duplicated: true, // 是否复制内容以实现无缝滚动
    delayBeforeStart: 0, // 开始前的延迟时间
    startVisible: true, // 是否在开始时可见
  };

  // 目标 Marquee 元素
  const $listings = $('.tt-services-listing');

  // 使用 window.matchMedia 监听屏幕宽度小于 768px 的媒体查询
  // m768.matches 会返回当前是否匹配该媒体查询
  const m768 = matchMedia("(width < 768px)");

  /**
   * 处理 Marquee 插件的初始化和销毁逻辑
   */
  const handleMarquee = () => {
    // 检查当前是否匹配移动端宽度 (width < 768px) 并且 Marquee 尚未初始化
    if (m768.matches && !$listings.data("marqueeinit")) {
      // 设置 data-marqueeinit 标志为 1,表示已初始化
      $listings.data("marqueeinit", 1);
      // 初始化 Marquee 插件
      $listings.marquee(marqueeOptions);
    }
    // 检查当前是否不匹配移动端宽度 (width >= 768px) 并且 Marquee 已经初始化
    else if (!m768.matches && $listings.data("marqueeinit")) {
      // 移除 data-marqueeinit 标志,表示已销毁
      $listings.removeData("marqueeinit");
      // 销毁 Marquee 插件
      $listings.marquee("destroy");
    }
  };

  // 监听窗口的 resize 事件,并在事件触发时调用 handleMarquee 函数
  $(window).on("resize", handleMarquee);

  // 页面加载时立即执行一次 handleMarquee,以根据初始屏幕宽度设置 Marquee 状态
  handleMarquee();

});

代码解析

  • jQuery($ => { ... });: 这是一个常见的 jQuery 简写,确保在 DOM 完全加载后执行代码,并且 $符号在作用域内指向 jQuery。
  • marqueeOptions: 定义了 Marquee 插件的配置参数,您可以根据需要进行调整。
  • $listings: 缓存了 Marquee 目标元素的 jQuery 对象,避免重复查询。
  • matchMedia("(width : 创建一个 MediaQueryList 对象,用于监听 width
  • handleMarquee() 函数:
    • 初始化条件: m768.matches 为 true(当前是移动端)且 !$listings.data("marqueeinit") 为 true(Marquee 尚未初始化)。满足这两个条件时,设置 data-marqueeinit 标志并初始化 Marquee。
    • 销毁条件: !m768.matches 为 true(当前是桌面端)且 $listings.data("marqueeinit") 为 true(Marquee 已经初始化)。满足这两个条件时,移除 data-marqueeinit 标志并销毁 Marquee。
  • $(window).on("resize", handleMarquee);: 绑定 resize 事件监听器,每次窗口大小改变时都会调用 handleMarquee。
  • handleMarquee();: 在脚本加载时立即调用一次 handleMarquee,以确保在页面首次加载时 Marquee 状态正确。

注意事项与最佳实践

  1. 媒体查询阈值: 示例中使用 768px 作为移动端和桌面端的分界线,您可以根据您的设计需求调整这个值。
  2. 插件销毁: jquery.marquee 插件提供了 destroy 方法,这是一个很好的实践。不是所有 jQuery 插件都提供 destroy 方法,如果您的插件没有,您可能需要手动移除相关的类、样式或事件监听器。
  3. 性能优化: 虽然 matchMedia 已经比直接查询窗口宽度更高效,但对于 resize 事件,通常建议使用 节流 (throttle)防抖 (debounce) 技术来限制 handleMarquee 函数的执行频率,进一步提升性能。例如,可以使用 Lodash 库中的 _.throttle() 方法。
  4. 初始化顺序: 确保 jQuery 库和 Marquee 插件在您的脚本之前加载。
  5. 离线测试: 在不同的设备和浏览器上测试您的实现,以确保其在各种条件下都能正常工作。

总结

通过结合 window.matchMedia 进行响应式媒体查询和 data-* 属性进行插件状态管理,我们可以优雅且高效地实现 jQuery.Marquee 插件在不同屏幕尺寸下的动态初始化和销毁。这种方法不仅解决了传统 resize 事件监听可能带来的性能和逻辑问题,也使得代码更加健壮和易于维护,为用户提供了更流畅、更符合预期的交互体验。

以上就是如何实现响应式 jQuery Marquee:移动端初始化,桌面端销毁的详细内容,更多请关注其它相关文章!


# java  # jquery  # html  # js  # npm  # 浏览器  # win  # javascript  # 这是一个  # 这两个  # 您可以  # 并在  # 如何实现  # 移除  # 加载  # 您的  # 作用  # 响应式布局  # 网页设计  # cdn  # 递归  # 如东营销推广  # 网站建设图片设计  # seo推广培训班  # 无忧网站建设公司  # 开店前怎么抖音营销推广  # 汉口网站建设推广  # seo怎么和客户沟通  # 东莞网站推广可以吗  # 惠州推广面试招聘网站  # SEO贴吧吧 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: b站网页版入口 哔哩哔哩官方网站直接进入  《地下城堡4:骑士与破碎编年史》墓穴挑战125攻略  Git命令与VS Code UI操作的对应关系解析  《kimi智能助手》制作ppt教程  微星主板BIOS怎么调整内存时序_内存参数手动优化BIOS设置教程  智慧职教mooc平台登录网址 智慧职教mooc官网直达  《下一站江湖2》武器获取方法  《理想汽车》权限管理设置方法  苹果手机缓存怎么清除_苹果手机缓存如何清除iphone各版本操作步骤  iQOO手机信号差网络不稳定怎么办 信号问题原因排查与增强设置【攻略】  Python类装饰器动态修改方法时的类型提示:Mypy插件实现精确静态分析  B站怎么快速升级 B站用户等级提升攻略【详解】  QQ邮箱注册地址 免费获取QQ邮箱账号  修复UI元素交互障碍:从“开始”按钮到信息框的平滑过渡实现  教资成绩怎么查询  mysql中外键约束如何使用_mysql FOREIGN KEY操作  视频转蓝光m2ts格式  在Peewee中处理PostgreSQL记录重复:一站式数据摄取教程  在XML中嵌入二进制数据(如图片)的最佳实践是什么? Base64编码与解析注意事项  mail.qq.com登录入口 QQ邮箱网页版直达  豆包AI怎样为教育场景定制答疑逻辑_为教育场景定制豆包AI答疑逻辑方案【方案】  微博网页版入口链接 微博网页版在线互动平台  win11怎么设置默认终端为Windows Terminal Win11替代CMD和PowerShell【技巧】  Golang如何使用log记录日志信息_Golang log日志记录方法总结  Selenium自动化:利用键盘模拟解决复杂日期输入框输入问题  HTML Canvas文本样式定制指南:解决外部字体加载与应用难题  百度小说看书时如何翻页_百度小说手动翻页与自动翻页设置  iPhone12是否要更新ios16  J*a里如何处理ArithmeticException并防止除零_算术异常防护策略解析  J*aScript大数运算_BigInt使用指南  漫蛙manwa官网浏览入口_漫蛙漫画网页版访问链接  todesk如何添加信任设备_todesk信任设备设置教程  实时数据流中高效查找最小值与最大值  哔哩哔哩的|直播|间怎么送礼物_哔哩哔哩|直播|送礼操作指南  Excel如何快速合并单元格内容_Excel文本合并与函数操作技巧  更换小红书群背景怎么换?小红书群规则怎么设置?  照片整理的黄金法则是怎样的? 理解“收集-筛选-归档-备份”四步流程  免费占卜在线神算_免费占卜手机神算  为什么XML解析器对大小写敏感? 理解XML规范中的大小写规则与最佳实践  firefox火狐浏览器最新官网主页_ firefox火狐浏览器平台入口直达官方链接  Win10怎么设置快速启动 Win10开启快速启动设置方法  《撕歌》会员开通方法  Python项目中的条件导入:解决跨模块依赖问题  NumPy 高性能技巧:基于多列条件查找最近邻行索引的向量化实现  谷歌邮箱怎么换绑定邮箱Gmail安全备份邮箱修改方法  快手网页版官方访问 快手网页版页面在线打开  《植物大战僵尸3》火龙草作用介绍  百度输入法在AutoCAD中无法输入中文怎么办_百度输入法CAD输入异常解决方法  韩小圈网页版PC端入口 韩小圈网页版官方网站入口  Dagster资产间数据传递与用户配置管理教程 

 2025-10-20

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.