兼容移动端:hover

2023-10-29

场景:

(react实例)
对于一个列表,加上选中高亮样式:
1. pc端,鼠标滑过高亮
2. 移动端,点击div任意位置,整行高亮


问题描述:

在移动端,:hover属性生效了(黑色的边框border),如图:
问题描述


原因分析:

在移动端,:hover的优先级高于class,如上图,最终的border颜色是黑色,而不是橘黄色。:hover被解析成click(mousedown)了;默认的click则是mouseup触发,效果如下图:
在这里插入图片描述


解决方案:

  1. 通过js的navigator.userAgent获取浏览器信息(类型及系统) , 是pc端才加上:hover

在这里插入图片描述


完整实例代码:

import classNames from 'classnames';
import React, { useEffect, useState } from 'react';
import  './App.css';

enum pc {
  windows = 'windows',
  mac = 'macOS'
}
// 系统区分
function getOS() {
  var u = navigator.userAgent;
  if (!!u.match(/compatible/i) || u.match(/Windows/i)) {
      return 'windows';
  } else if (!!u.match(/Macintosh/i) || u.match(/MacIntel/i)) {
      return 'macOS';
  } else if (!!u.match(/iphone/i) || u.match(/Ipad/i)) {
      return 'ios';
  } else if (!!u.match(/android/i)) {
      return 'android';
  } else {
      return 'other';
  }
}

function App() {
  const [selectId, setSelectId] = useState<string>('')
  const [isPc, setIsPc] = useState<boolean>(false)
  const msg = []
  for(let i = 0; i < 99; i++){
    msg.push({id: i})
  }
  useEffect(() => {
    const sys = getOS()
    setIsPc(sys === pc.windows || sys === pc.mac)
  }, [])

  const selectItem = (e: any) => {
    console.log(e.target.className);
    setSelectId(e.target.className.replace('list-', ''))
  }
  return (
    <div className="App">
      <div className={'lists-box'} onClick={(e) => selectItem(e)}>
        {msg.map(item => {
          return <div
          key={item.id}
           className={classNames({
             'list-hover': isPc,
            'list-item': item.id.toString() === selectId,
            [`list-${item.id}`]: true
          })}>{item.id}</div>
        })}
      </div>
    </div>
  );
}

export default App;
.list-hover:hover{
  height: 30px;
  border: rgb(7, 7, 7) solid 2px;
}

.list-item{
  height: 30px;
  border: rgb(241, 176, 90) solid 1px;
  background-color: rgb(241, 176, 90);
}

// 各主流浏览器
function getBrowser() {
    var u = navigator.userAgent;
 
    var bws = [{
        name: 'sgssapp',
        it: /sogousearch/i.test(u)
    }, {
        name: 'wechat',
        it: /MicroMessenger/i.test(u)
    }, {
        name: 'weibo',
        it: !!u.match(/Weibo/i)
    }, {
        name: 'uc',
        it: !!u.match(/UCBrowser/i) || u.indexOf(' UBrowser') > -1
    }, {
        name: 'sogou',
        it: u.indexOf('MetaSr') > -1 || u.indexOf('Sogou') > -1
    }, {
        name: 'xiaomi',
        it: u.indexOf('MiuiBrowser') > -1
    }, {
        name: 'baidu',
        it: u.indexOf('Baidu') > -1 || u.indexOf('BIDUBrowser') > -1
    }, {
        name: '360',
        it: u.indexOf('360EE') > -1 || u.indexOf('360SE') > -1
    }, {
        name: '2345',
        it: u.indexOf('2345Explorer') > -1
    }, {
        name: 'edge',
        it: u.indexOf('Edge') > -1
    }, {
        name: 'ie11',
        it: u.indexOf('Trident') > -1 && u.indexOf('rv:11.0') > -1
    }, {
        name: 'ie',
        it: u.indexOf('compatible') > -1 && u.indexOf('MSIE') > -1
    }, {
        name: 'firefox',
        it: u.indexOf('Firefox') > -1
    }, {
        name: 'safari',
        it: u.indexOf('Safari') > -1 && u.indexOf('Chrome') === -1
    }, {
        name: 'qqbrowser',
        it: u.indexOf('MQQBrowser') > -1 && u.indexOf(' QQ') === -1
    }, {
        name: 'qq',
        it: u.indexOf('QQ') > -1
    }, {
        name: 'chrome',
        it: u.indexOf('Chrome') > -1 || u.indexOf('CriOS') > -1
    }, {
        name: 'opera',
        it: u.indexOf('Opera') > -1 || u.indexOf('OPR') > -1
    }];
 
    for (var i = 0; i < bws.length; i++) {
        if (bws[i].it) {
            return bws[i].name;
        }
    }
 
    return 'other';
}
 
// 系统区分
function getOS() {
    var u = navigator.userAgent;
    if (!!u.match(/compatible/i) || u.match(/Windows/i)) {
        return 'windows';
    } else if (!!u.match(/Macintosh/i) || u.match(/MacIntel/i)) {
        return 'macOS';
    } else if (!!u.match(/iphone/i) || u.match(/Ipad/i)) {
        return 'ios';
    } else if (!!u.match(/android/i)) {
        return 'android';
    } else {
        return 'other';
    }
}
  1. 使用@media screen限制hover样式生效时的屏幕分辨率,如图中,当屏幕宽<1000px,则hover不生效(屏幕宽<1000px,则hover不生效)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

兼容移动端:hover 的相关文章

  • 如何精确缩放已翻译的d3地图

    我有一张已翻译的地图 以使其正确适合画布 我正在尝试实现一种缩放它的方法 它确实有效 但是当您放大时它会远离中心 而不是以鼠标甚至画布为中心 这是我的代码 function map data total views var xy d3 ge
  • 弃用警告:时刻构造回退到 js Date

    我正在尝试转换这个日期时间 150423160509 这是 utc 日期时间 改为以下格式 2015 04 24 00 05 09 本地时区 通过使用 moment js var moment require moment timezone
  • 如何在重新加载或向后/向前重定向时保存 React 页面的状态?

    下面是我的代码 我正在使用 API 并获取当前页面上的一些数据 现在 我想在重新加载页面或再次返回或前进时保存此页面的状态 在这里 我从上一页 api 获取 featureGroupID 并将其存储在全局变量 customerID 中 我知
  • 通过 Javascript 更改 Webkit 属性?

    请帮助我 可能是因为我对 CSS 动画和 Javascript 相当陌生 但我使用的代码应该更改它的属性 当我运行代码时 它会执行代码中的所有其他操作 除了更改所需 div 的 CSS 属性 我已经尝试了所有这四种方法 但似乎都不起作用 它
  • Javascript 制作音频 blob

    我正在测试 html 音频标签 我想制作音频 blob url 就像 youtube 或 vimeo 那样 并将其添加到 src 开始播放音频 我一直在测试new Blob and URL createObjectURL 但我不知道如何使用
  • 光标:IE 8 和 9 中的自动行为

    我想要的是为整个正文标记指定cursor pointer 这样页面的背景是可点击的 但我也希望页面的其余部分像以前一样工作 所以我尝试为div设置cursor auto 其中包含这一页 在 FF Chrome 和 safari 中 它工作得
  • Express JS:请求的资源上不存在“Access-Control-Allow-Origin”标头

    我有一个在服务器上运行的 API 和一个连接到它以检索数据的前端客户端 我对跨域问题做了一些研究并使其发挥作用 但我不确定发生了什么变化 我现在在控制台中收到此错误 XMLHttpRequest 无法加载https api mydomain
  • 如何显示/隐藏jsf组件

    在我的一个 JSF 应用程序中 顶部的标题部分包含 selectOneMenu 底部的内容部分显示过滤器组件 默认情况下 应用程序首先在顶部显示 selectOneMenu 数据 在底部显示相应的 Filter 信息 如果用户选择不同的se
  • 处理时区转换的 JavaScript 库

    是否有一个 JavaScript 库可以处理时区转换 并考虑 DST 规则和此类内容 我知道有类似的问题 但我见过的问题似乎都没有真正适合我的问题的答案 我想在时区 A 创建一个日期并能够对其进行操作 添加天数 小时等 然后将其转换为另一个
  • dc lineChart 单击时弹出数据点信息

    我正在尝试检测折线图数据点上的点击 Per this answer dc scatter plot binding onClick event https stackoverflow com a 22772340 1873386 I am
  • 如何将OpenLayers多边形坐标转换为纬度和经度?

    我正在使用开放层 https openlayers org en latest examples draw freehand html绘制多边形并保存坐标的技术 这是我的代码 var raster new ol layer Tile sou
  • Lightbox:如何翻译“Image x of x”文本?

    我使用 Lightbox 2 作为图像集 当我的网站的访问者单击该集中的缩略图时 它将显示 图像的放大版本 下面是 描述 取自 a 标题属性 其下方 文本 Image x of x 例如 Image 1 of 12 有谁知道在哪里翻译 更改
  • 如何处理 setTimeout() 的多个实例?

    阻止创建 setTimeout 函数的多个实例 在 JavaScript 中 的最推荐 最佳方法是什么 一个例子 伪代码 function mouseClick moveDiv div 0001 mouseX mouseY function
  • 如何让 webpack 转换 React 生产文件?

    当我使用 webpack 与 React 16 捆绑我的应用程序时 我在浏览器中收到 Uncaught ReferenceError require is not Defined 对于react和react dom 导致错误的资源是reac
  • 如果突出显示一个单词并且用户单击连接单词,则同时突出显示两个单词

    我最近发布了一个question https stackoverflow com questions 34963610 how can i highlight a word term quicker and smarter寻求一种更智能地突
  • Intern JS - 如何在链式 Command 方法中使用 Promise.all()?

    我是用 Intern JS 编写测试的新手 并且一直在遵循他们的文档来使用对象接口 https theintern github io intern interface object and 页面对象 https theintern git
  • 如何获取从 Express (Node.js) 中的表单传递的数据

    我想获取使用表单从页面传递的数据 并在重定向的页面中使用该数据 我的客户端有这个表格
  • 禁用移动设备上的锚点菜单点击

    我使用嵌套列表作为带有子菜单项的菜单 我曾经这样做过 如果您将鼠标悬停在主菜单项上 子菜单项将通过将显示从无更改为块来出现 我决定让子菜单看起来就像是下拉的 并使用了 CSS 过渡 我遇到的问题是 在第一种方法中 如果您触摸 iPad 上的
  • “memset”没有 DLL 那么如何 ctype 它

    如何使用memset在 jsc 类型中 没有对应的 DLL 我搜索 搜索了 js ctype 代码 但找不到要破解的示例 如果你只是想memset一个数组为零字节 然后我有 好消息 大家 js ctypes 会将新数组初始化为零 否则 最简
  • 加载谷歌地图控件时是否有事件?

    我知道tilesloaded 但控件似乎在该事件之后加载 我基本上希望能够通过 jQuery 获取控件 但甚至找不到正确的监听 我也刚刚处理了 没有类似的事件 在控件可见之前空闲和tilesloaded触发 因此 基本上将 特殊控制 类添加

随机推荐

  • 漂亮~阿里P8整理总结,金九银十入职大厂必备的Java核心知识点,附加面试题+答案解析

    前言 金九银十就要来了 不知道程序员们都准备好了吗 今天就给大家分享一波一位小伙伴面试大厂的经历 知识点和面试题分享 主要内容包括 JVM JAVA集合 JAVA多线程并发 JAVA基础 Spring原理 微服务 Netty与RPC 网络
  • STM32芯片3.3V IO口驱动MOS管电路

    Nmos管做低端驱动 电路工作原理说明 对于Nmos管 G极电位比S极电位高于导通域值电压便会导通 对于Pmos管则相反 G极电位比S极电位低于导通域值电压才会导通 所以Nmos管适合做低端驱动 S极接地 以使S极的电压固定 Pmos管适合
  • 七牛云详细教程(包含与阿里云建立连接)

    七牛云详细教程 包含与阿里云建立连接 1 七牛云简介 不管是设计师 还是开发者 亦或是个人 公司 我们有时会需要将图片存在网络上 然后用链接来分享给他人 或是 用来给网站做图片外链 通过CDN加速 新浪 QQ 百度等等公司基本都做了防盗链
  • android源码linux环境配置及其编译方法

    安装依赖libs sudo apt get install openjdk 11 jdk 安装jdk sudo apt get install libx11 dev i386 libreadline6 dev i386 libgl1 mes
  • Mysql之分组查询

    学习目标 能够写出分组查询的SQL语句 1 分组查询介绍 分组查询就是将查询结果按照指定字段进行分组 字段中数据相等的分为一组 分组查询基本的语法格式如下 GROUP BY 列名 HAVING 条件表达式 WITH ROLLUP 说明 列名
  • linux命令stat,Linux stat命令的使用

    1 命令简介 stat命令用于显示文件或文件系统的详细信息 在显示文件信息时 比ls命令更加详细 2 命令格式 3 命令选项 4 常用示例 1 显示文件信息 信息解释 File Changelog 文件名称为Changelog Size 1
  • 米尔基于STM32MP135核心板,助力充电桩发展

    随着电动车的普及和人们环保意识的增强 充电桩作为电动车充电设备的重要一环 充电桩行业正迅速发展 消费市场的大量应用也造就市场的需求量不断增长 因此 产品的功能 可靠性 安全性等要求也变得尤为重要 而采用传统单片机产品并不能满足充电桩的智能控
  • 【object detection】RCNN 实践篇 - 使用 Alexnet 预训练 17-flower 数据集(17分类),使用 2-flower 数据集进行 fine-tuning

    前言最近根据制定的 Deep Learning 学习计划 11月份的主要任务是 熟悉各大DL网络模型 主要以分类和检测为主 看论文 熟悉病理数据等 我们有一个2人组的小分队 我这个月的主要工作集中在学习目标检测的经典算法以及基于tensor
  • anywhere 无法正常使用的问题--IP地址解析

    简介与安装 安装命令 安装 npm install anywhere g 使用 在所需运行的项目路径下 执行命令 anywhere 即可运行 但有个问题是 手机上无法运行 在同一局域网下的所有设备 均可访问 但是手机和电脑是连接的同一WiF
  • Blender新手入门笔记

    Blender 2 8 0 常用快捷键 A 全部选中 AA全部取消选中 B 框选 C 涂抹选中 E 挤出 EX RY EZ沿着X Y Z 方向挤出 R旋转 RX RY RZ 沿着X Y Z旋转 RR 360 旋转 S 缩放 SX SY SZ
  • 一、Fiddler抓包工具 — Fiddler介绍与安装

    文章内容有配套的 学习视频和笔记都放在了文章末尾 1 Fiddler简介 Fiddler是强大的抓包工具之一 它能记录所有客户端和服务器之间的HTTP和HTTPS请求 是web调试的利器 Fiddler是位于客户端和服务端之间的HTTP代理
  • 本地使用AutoML-nni进行超参数调优实验

    目的 在自己的代码中NNI工具 进行超参数自动调优训练自己的项目 得到精度最高的一组超参数 nni地址 GitHub microsoft nni An open source AutoML toolkit for automate mach
  • 关于识别回车符问题

    原来问题程序是这样的 pre class cpp include pre
  • 【教程】-在rknn-toolkit2模拟器中验证测试语义分割模型Yolov5-seg

    引言 为了以后能够顺利的将模型部署在rk3568开发板中 我们首先要在rknn toolkit2提供的模拟器环境中进行运行测试 从而保证所选模型能够在开发板上进行部署 测试环境是Ubuntu20 04 yolov5下载地址 ultralyt
  • html ul li 行显示li 间距,[ 求助 ] 让ul li缩小行间距的CSS代码是什么?

    我在网页中插入如下一段RSS阅读器代码 复制内容到剪贴板 代码 Subscribe to RSS headline updates from Powered by FeedBurner可是保存后 发现每行的列表样式间距特别大 怎么调也没用
  • HTML/CSS 一个非常漂亮的户信息输入页面(含照片)

    第一次发博客 有什么问题还请大神指出 先上效果图 代码部分
  • 数字信号处理(一)利用FFT对信号进行频谱分析

    数字信号处理 一 利用FFT对信号进行频谱分析 1 实验目的 1 进一步加深DFT算法原理和基本性质的理解 因为FFT只是DFT的一种快速算法 所以FFT的运算结果必然满足DFT的基本性质 2 熟悉FFT算法原理和FFT程序的应用 3 学习
  • PJNATH库关于NAT穿越问题及解决方案

    PJNATH 关于NAT穿越的简介 NAT和NAT穿越简介 NAT穿越问题 对等地址问题 发夹 行为 对称行为 绑定超时 NAT穿越解决方案 旧STUN RFC 3489 STUN STUNbis RFC 5389 旧TURN TURN B
  • matlab随机森林特征选择,使用随机森林做特征选择

    目录 一 介绍 随机森林模型不仅在预测问题上有着广泛的应用 在特征选择中也有一定的应用 这是因为 随机森林模型在拟合数据后 会对数据属性列 有一个变量重要性的度量 在sklearn中即为随机森林模型的 feature importances
  • 兼容移动端:hover

    场景 react实例 对于一个列表 加上选中高亮样式 1 pc端 鼠标滑过高亮 2 移动端 点击div任意位置 整行高亮 问题描述 在移动端 hover属性生效了 黑色的边框border 如图 原因分析 在移动端 hover的优先级高于cl