php 鼠标点击图片放大,鼠标移入放大图片预览效果实现

商城项目中,有鼠标移入图片放大的功能,研究一下实现

Image zoom

body {

display: flex;

justify-content: center;

align-items: center;

min-height: 100vh;

}

#image {

width: 300px;

height: 300px;

background-color: #000;

background-image: url(https://placekitten.com/900/900);

background-size: 300px 300px;

background-repeat: no-repeat;

}

#image[zoomed] {

background-size: 900px 900px;

background-position: calc(var(--x) * 100%) calc(var(--y) * 100%);

}

let el = document.querySelector('#image')

// PC端操作

el.addEventListener('mouseenter', enterHandler)

el.addEventListener('mousemove', moveHandler)

el.addEventListener('mouseleave', leaveHandler)

// 移动端操作

el.addEventListener('touchstart', enterHandler)

el.addEventListener('touchmove', moveHandler)

el.addEventListener('touchend', leaveHandler)

function enterHandler(e) {

e.target.setAttribute('zoomed', 1)

moveHandler(e)

}

function moveHandler(e) {

// getBoundingClientRect用于获取元素相对于视窗的位置集合。集合中有top, right, bottom, left等属性

let rect = e.target.getBoundingClientRect()

let offsetX, offsetY

let isH5 = ['touchstart', 'touchmove', 'touchend'].includes(e.type)

// 是移动端,并且touches事件存在

if (isH5 && e.touches[0]) {

offsetX = e.touches[0].pageX - rect.left

offsetY = e.touches[0].pageY - rect.top

e.preventDefault()

} else {

// PC端

offsetX = e.offsetX

offsetY = e.offsetY

}

// 元素的位置信息

let x = offsetX / rect.width

let y = offsetY / rect.height

// 设置元素属性,用于计算background-position的位置

e.target.style.setProperty('--x', x)

e.target.style.setProperty('--y', y)

}

function leaveHandler(e) {

e.target.removeAttribute('zoomed')

moveHandler(e)

}

具体效果复制下去打开看看

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

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

相关文章

红帽峰会2015所需的JBoss BPM内容指南

明年再见? 今年在Red Hat Summit上,我们在JBoss BRMS和JBoss BPM Suite演讲中获得了很多乐趣。 在DevNation周围也有一些社区会议,重点介绍了使我们的产品成为可能的项目。 您可以在他们的博客上找到此演讲的概述,并在其中提供…

设计模式 之 享元

享元模式(Flyweight) 运用共享技术有效地支持大量细粒度的对象。 还记得那年夏天一起在作文本上玩过的五子棋吗?五子棋是一种两人对弈的纯策略型棋类游戏,它起源于中国古代的传统黑白棋种之中的一个,不…

php制作简单的用户登陆,如何用php代码实现简单的用户登陆以及登陆验证功能

本文主要简单讲述了如何使用php实现简单的用户登陆以及登陆验证效果。1、首先实现通过Session实现用户的登录那么什么是session呢?session被译为会话,它主要是为了在一定访问期间在不同页面之间间传输数据,用来解决http协议无状态。session在…

纪事日记–可自定义的数据存储

总览 使任何数据结构或算法尽可能快的方法是使代码完全执行您想要的操作,而无需执行其他操作。 建立一个可以做任何人想做的每件事的数据存储的问题是,它做得不好。 自定义数据存储在性能方面可以实现什么? 您可以支持; 大约75纳…

php vprintf,vprintf - [ C语言中文开发手册 ] - 在线原生手册 - php中文网

格式-指向以空字符结尾的字符串的指针,指定如何解释数据。格式字符串由普通的多字节字符(%除外)组成,它们被原样复制到输出流和转换规范中。每个转换规范具有以下格式:介绍%字符(可选)一个或多个标志,用于修…

Quick cocos2dx-Lua(V3.3R1)学习笔记(十)-----搭建安卓打包环境,用官方示例anysdk生成apk运行...

话说我这一篇就写搭建打包安卓环境,是不是有点过早了(其实我主要是怕以后重装系统,忘了怎么搭建了),但是迟早要面对的痛苦,一直延后也不是办法,对吧。 在官方文档中,对于打包安卓apk…

ejb运行程序_EJB程序化查找

ejb运行程序在上一篇文章中,我们了解了EJB 引用和EJB 注入 。 尽管EJB注入是一种强大的容器工具,可以简化模块化应用程序的开发,但有时还是希望执行程序化EJB查找。 例如,让我们假设一组不同的EJB实现由公共业务接口定义的公共策略…

php实现返回顶部,返回顶部js

返回顶部jsfunction goTopEx(){var objdocument.getElementById(“goTopBtn”);function getScrollTop(){return (document.documentElement.scrollTopdocument.body.scrollTop);}function setScrollTop(value){if(document.documentElement && document.documentEleme…

中国大学MOOC-数据结构基础习题集、06-2、旅游规划

题目链接:http://www.patest.cn/contests/mooc-ds/06-2 题目分析:陈姥姥说,这是Dijstra算法的一道题。题目是中文的,这里就不再啰嗦了。有一点提示一下,咱们平时用的Dijistra算法,是用来求最短路径的。这道…

我们正在下注:这个注解很快就会出现在JDK中

Yahor最近提出的Stack Overflow问题引起了我的兴趣: 如何在Java 8编译时确保方法签名“实现”功能接口 。 这是一个很好的问题。 让我们假设以下名义类型: FunctionalInterface interface LongHasher {int hash(long x); }该类型强加了清晰的合同。 实现…

java解码p7b证书文件,通过OpenSSL解码X509证书文件

在Windows平台下,如果要解析一个X509证书文件,最直接的办法是使用微软的CryptoAPI。但是在非Windows平台下,就只能使用强大的开源跨平台库OpenSSL了。一个X509证书通过OpenSSL解码之后,得到一个X509类型的结构体指针。通过该结构体…

php 网页手册模板,网站表单模板

前端界面默认网站表单模板介绍发布:/template/pc/default/home/form_post.html列表:/template/pc/default/home/form_list.html查看:/template/pc/default/home/form_show.html自定义网站表单模板介绍发布:/template/pc/default/h…

iOS安全攻防(三):使用Reveal分析他人app

使用Reveal分析他人app准备工作1)已越狱的设备,而且已安装了OpenSSH,MobileSubstrate等有用工具(Cydia源里安装)2)本地已安装了Reveal操作步骤1)拷贝framework和dylib到越狱机scp -r /Applications/Reveal.app/Contents/SharedSup…

orm框架选型问题_ORM问题

orm框架选型问题在过去的几年中,像Hibernate这样的对象关系映射工具已经帮助开发人员在处理关系数据库方面获得了巨大的生产力增长。 ORM使开发人员可以专注于应用程序逻辑,并避免为诸如插入或查询之类的简单任务编写大量样板SQL。 但是,充分…

iwifi 命令

1: tftp -gr ctwancfg.html 192.168.1.18转载于:https://www.cnblogs.com/gavinwu/p/4221790.html

JBoss BPM Travel Agency演示与现代BPM数据集成

不久前,我们启动了一个规模较大的JBoss Travel Agency演示项目,以展示JBoss BPM Suite的一些更有趣的功能。 我们提供了一系列视频 ,不仅向您展示了如何安装它,项目中各种规则和流程工件的含义,还向您介绍了在实际使用…

京东php asp,jd jd demo 关于php的代码里面是 一些京东的接口 包含了 重要 WEB(ASP,PHP,...) 238万源代码下载- www.pudn.com...

开发工具: PHP文件大小: 183 KB上传时间: 2013-04-15下载次数: 1详细说明:jd demo 关于php的代码里面是关于一些京东的接口里面的代码包含了一些重要-jd demo about php code jingdong interface文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评…

scala入门-10 隐式转换、隐式参数、隐式类

到目前为止,隐式转换是scala的重点和难点了,加油~ 我们先创建一个类名称叫Implicit.scala 再看一个隐式参数的例子: 上面的例子中使用了隐式参数,我们也可以明显的指明参数: 下面看一下隐式类: 相当于&…

抢答网页PHP,[抢答]抢答环节已结束,相关答案已封箱 - 薅羊毛(Coupon)版 - 北大未名BBS...

mojave (你说得都对) 在 ta 的帖子中提到:抢答活动已经全部结束。截止目前,以下题目的正确答案不足5个:第9题、第22题、第23题等。封盘时间为今晚23:00。各位可以在封盘之前继续回答。另外我们提醒大家,如果一题中有多个回答&…

连载《一个程序猿的生命周期》-2.城市校园生活

一个程序猿的生命周期 微信平台 口 号:职业交流,职业规划;面对现实,用心去交流、感悟。 公众号:iterlifetime 百木-ITer职业交流奋斗 群:141588103 微 博:http://www.weibo.com/u/57234…