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 ...
随机推荐
- 决策树模型(4)Cart算法
Cart算法 Cart是Classification and regression tree的缩写,即分类回归树.它和前面的ID3, C4.5等算法思想一致都是通过对输入空间进行递归划分并确定每个单元 ...
- openGauss每日一练第四天
openGauss 每日一练第四天 本文出处:https://www.modb.pro/db/193083 学习地址 https://www.modb.pro/course/133 学习目标 学习 o ...
- HarmonyOS 极客马拉松2023 正式启动,诚邀极客们用键盘码出无限可能!
原文:https://mp.weixin.qq.com/s/p2yIs0rMmDE2BwhzsAtr7A,点击链接查看更多技术内容. 2023年6月15日, HarmonyOS极客马拉松2023开 ...
- CentOS 7快速安装配置 Odoo 12
> Coding > CentOS 7快速安装配置 Odoo 12 CentOS 7快速安装配置 Odoo 12 Coding Alan 11个月前 (10-19) 4777次浏览 ...
- vscode 编辑python 如何格式化
正文 今天同事说我的代码的格式不对,其实就是几个空格忘了空4格了,但是代码可运行. 那么如何帮我们检测呢? pip install yapf 然后打开setting: 输入:ython.formatt ...
- 重新点亮linux 命令树————网络配置的查看[十一三]
前言 简单整理一下网络配置. 正文 通过ifconfig 查看. 这个就是ip地址. 网卡mac地址. 还有一块信息非常重要: 这个io开头的信息,这里面就是我们127.0.0.1的信息. 那么就来演 ...
- lattice crosslink开发板mipi核心板csi测试dsi屏lif md6000 fpga 常见问题解答
1. 概述 CrossLink开发板,是用Lattice的芯片CrossLink 家族系列的,LIF-MD6000-6JM80I.该芯片用于桥接视频接口功能,自带2路MIPI硬核的功能,4 LANE ...
- Flutter笔记 - 布局类组件
布局类组件 Row水平方向排列 textDirection 水平方向子组件布局顺序. mainAxisSize 占用空间,默认MainAxisSize.MAX mainAxisAligment 对齐方 ...
- java知识点查漏补缺-- 2020513
重载和重写 方法重载(overload): 必须是同一个类 方法名(也可以叫函数)一样 参数类型不一样或参数数量不一样 方法的重写(override)两同两小一大原则: 方法名相同,参数类型相同 子类 ...
- 深度解析开源推荐算法框架EasyRec的核心概念和优势
简介:如何通过机器学习PAI实现快速构建推荐模型 作者:程孟力 - 机器学习PAI团队 随着移动app的普及,个性化推荐和广告成为很多app不可或缺的一部分.他们在改善用户体验和提升app的收益方面 ...