Vue实现商品详情鼠标移动+放大显示图片细节
效果图

代码实现
<template>
<div>
<div style="position: relative;" class="box">
<img @mousemove="updatePositions"
src="https://img.pddpic.com/gaudit-image/2023-07-09/36b632c77506c42d1bc206924a054310.jpeg" alt="" />
<div v-if="moveVisiable" class="move" @mouseout="()=>moveVisiable = false" style="" @mousemove="updatePosition"
:style="draggableStyle"></div>
<div class="preview" v-if="moveVisiable">
<img :style="detailImageStyle"
src="https://img.pddpic.com/gaudit-image/2023-07-09/36b632c77506c42d1bc206924a054310.jpeg" width="800px"
height="800px" alt="" />
</div>
</div>
</div>
</template>
<script>
export default {
components: {},
data() {
return {
top: 0,
left: 0,
offset: {
x: 200,
y: 200
},
moveVisiable: false,
animationFrameId: null,
}
},
computed: {
detailImageStyle() {
return {
transform: `translate(${-this.offset.x}px, ${-this.offset.y}px)`
};
},
draggableStyle() {
return {
transform: `translate(${this.offset.x}px, ${this.offset.y}px)`
};
}
},
methods: {
name() {
},
updatePositions(event) {
// console.log('event: ',event);
const {
clientX,
clientY
} = event;
const x = event.clientX - 50;
const y = event.clientY - 50;
this.offset = {
x: Math.min(Math.max(x, 0), 300),
y: Math.min(Math.max(y, 0), 300)
};
this.moveVisiable = true;
},
updatePosition(event) {
const {
clientX,
clientY
} = event;
console.log('clientY: ', clientY, 'clientX: ', clientX);
if (!this.animationFrameId) {
this.animationFrameId = requestAnimationFrame(() => {
const x = event.clientX - 50;
const y = event.clientY - 50;
this.offset = {
x: Math.min(Math.max(x, 0), 300),
y: Math.min(Math.max(y, 0), 300)
};
// this.offset = {
// x:x<0?0:x,
// y:y>300?300:y
// };
this.animationFrameId = null;
});
}
}
},
}
</script>
<style scoped>
.box {
height: 400px;
width: 400px;
}
.move {
cursor: move;
width: 100px;
height: 100px;
background-color: #faebd7a1;
position: absolute;
top: 0px;
border: 1px dashed orange;
}
.preview {
overflow: hidden;
position: absolute;
width: 600px;
height: 600px;
left: 400px;
top: 0;
}
</style>
Vue实现商品详情鼠标移动+放大显示图片细节的更多相关文章
- AntDesign vue学习笔记(六)Table 显示图片
AntDeign官网上没有table动态绑定显示图片的示例,baidu上搜索出来的大部分都是React语法,无法使用. 经过摸索,实现方法如下:以显示一个图片,一个按钮为例(picurl是返回的jso ...
- WPF通过鼠标滑轮缩放显示图片
如果你使用WinForm比较难实现通过滚动鼠标滑轮来对图片进行缩放显示,那么,你应该考虑一下使用WPF,既然是下一代Windows客户端开发平台,明显是有一定优势的,不然,MS是吃饱了撑着. 首先 ...
- 整合GreyBox放大显示图片
<s:iterator value="#request.photoList" id="photo" status="stu"> ...
- Js图片缩放代码 鼠标滚轮放大缩小 图片向右旋转
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 用js原生加jquery实现下拉跳转至商品详情页,上拉回到商品简介
在做一个商城的项目时,做到商品详情页的时候需要实现这种下拉跳转到商品详情页加载许多图片,上拉回到商品简介的效果,并且需要用户在滑动时有一种费力的感觉.最初是通过iscroll插件实现的,但这个插件在使 ...
- Vue框架H5商城类项目商品详情点击返回弹出推荐商品弹窗的实现方案
需求场景: 非推荐商品详情页返回的时候弹出弹窗推荐商品,点击弹窗按钮可以直接访问推荐商品: 只有直接进入商品详情页返回才会弹出推荐商品弹窗: 每个用户访问只能弹一次(除非清除缓存). 需求分析: 1. ...
- 基于css3的鼠标经过动画显示详情特效
之前为大家分享过一款基于jquery的手风琴显示详情,今天给大家分享基于css3的鼠标经过动画显示详情特效.这款实例鼠标经过的时候基于中间动画放大,效果非常不错,效果图如下: 在线预览 源码下载 ...
- Ecshop商品详情页显示当前会员等级价格
会员登录状态下,在ECSHOP商品详情页的本店售价中显示当前登录会员对应的等级价格,在未登录状态下,则还默认显示原来的本店售价. 解决方法: 这个需要修改ECSHOP程序代码来实现. 打开文件 /in ...
- ecshop 商品详情页显示同类别下的推荐商品
1.打开goods.php文件找到下面代码 $smarty->assign('goods_rank', get_goods_rank($goods_id)); // 商品的销售排名 在上面的代码 ...
- 在ecshop商品详情页显示供货商
好久没写文章了,隐约记得前几天有人问到这个问题:[如何在ecshop商品详情页面显示该商品的供货商?] 今天有时间整理下,分享给大家. 注:以下修改适用于ecshop2.7.2,其他版本未做测试. 1 ...
随机推荐
- Java 容器详解:使用与案例
Java容器是一套工具,用于存储数据和对象.可以与C++的STL类比.Java容器也称为Java Collection Framework (JCF).除了存储对象的容器之外,还提供了一套工具类,用于 ...
- IDEA Tab键设置为4个空格
在不同的编辑器里 Tab 的长度可能会不一致,这会导致有 Tab 的代码,用不同的编辑器打开时,格式可能会乱. 而且代码压缩时,空格会有更好的压缩率. 所以建议将 IDEA 的 Tab 键设置为 4 ...
- Lite Actor:方舟Actor并发模型的轻量级优化
原文:https://mp.weixin.qq.com/s/8biIBddpy6GKgakazg1vcg,点击链接查看更多技术内容. 并发模型是用来实现不同应用场景中并发任务的编程模型,通过合理地使用 ...
- nginx重新整理——————nginx 的网络模型[九]
前言 简单介绍一下nginx的网络模型. 正文 网络拓扑图: 数据流: 网络传输大概是这样传输的. nginx 事件循环: 事件处理过程: 上面两张图什么意思呢? 其实就是说,nginx 是通过事件驱 ...
- IIS 部署到服务器上出现数据库连接失败
前言 以前遇到过本地运行没有任何问题,部署到服务器上却出现数据库连接失败. 正文 排查顺序: 数据库权限 我们的sql的账号决定了我们的权限,那么要观察下是否我们的账号有该数据库的读写权限,先把权限归 ...
- Flask、Tornado、Nginx搭建Https服务
其实Flask可以直接用tornado部署就行: # coding=utf-8 from tornado.wsgi import WSGIContainer from tornado.httpserv ...
- FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
<FFmpeg开发实战:从零基础到短视频上线>一书的例程主要测试本地的音视频文件,当然为了安全起见,很多网络视频都采用了https地址.FFmpeg若要访问https视频,就必须集成第三 ...
- SVN Windows10的安装
SVN Windows安装与配置 先去到官网的下载链接:Download Apache Subversion Sources 然后点这个 binary packages 在这里能看到大多数的操作系统的 ...
- Yurt-Tunnel 详解|如何解决 K8s 在云边协同下的运维监控挑战
简介: 伴随着 5G.IoT 等技术的快速发展,边缘计算被越来越广泛地应用于电信.媒体.运输.物流.农业.零售等行业和场景中,成为解决这些领域数据传输效率的关键方式.与此同时,边缘计算形态.规模.复杂 ...
- [FE] Canvas 转图片并下载的方式
先获取 canvas 节点,使用 toDataURL 转为 image 数据,最后使用 a 链接下载. // Trans to image const canvas = document.getEle ...