效果图

代码实现

<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实现商品详情鼠标移动+放大显示图片细节的更多相关文章

  1. AntDesign vue学习笔记(六)Table 显示图片

    AntDeign官网上没有table动态绑定显示图片的示例,baidu上搜索出来的大部分都是React语法,无法使用. 经过摸索,实现方法如下:以显示一个图片,一个按钮为例(picurl是返回的jso ...

  2. WPF通过鼠标滑轮缩放显示图片

    如果你使用WinForm比较难实现通过滚动鼠标滑轮来对图片进行缩放显示,那么,你应该考虑一下使用WPF,既然是下一代Windows客户端开发平台,明显是有一定优势的,不然,MS是吃饱了撑着.   首先 ...

  3. 整合GreyBox放大显示图片

    <s:iterator value="#request.photoList" id="photo" status="stu"> ...

  4. Js图片缩放代码 鼠标滚轮放大缩小 图片向右旋转

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 用js原生加jquery实现下拉跳转至商品详情页,上拉回到商品简介

    在做一个商城的项目时,做到商品详情页的时候需要实现这种下拉跳转到商品详情页加载许多图片,上拉回到商品简介的效果,并且需要用户在滑动时有一种费力的感觉.最初是通过iscroll插件实现的,但这个插件在使 ...

  6. Vue框架H5商城类项目商品详情点击返回弹出推荐商品弹窗的实现方案

    需求场景: 非推荐商品详情页返回的时候弹出弹窗推荐商品,点击弹窗按钮可以直接访问推荐商品: 只有直接进入商品详情页返回才会弹出推荐商品弹窗: 每个用户访问只能弹一次(除非清除缓存). 需求分析: 1. ...

  7. 基于css3的鼠标经过动画显示详情特效

    之前为大家分享过一款基于jquery的手风琴显示详情,今天给大家分享基于css3的鼠标经过动画显示详情特效.这款实例鼠标经过的时候基于中间动画放大,效果非常不错,效果图如下: 在线预览   源码下载 ...

  8. Ecshop商品详情页显示当前会员等级价格

    会员登录状态下,在ECSHOP商品详情页的本店售价中显示当前登录会员对应的等级价格,在未登录状态下,则还默认显示原来的本店售价. 解决方法: 这个需要修改ECSHOP程序代码来实现. 打开文件 /in ...

  9. ecshop 商品详情页显示同类别下的推荐商品

    1.打开goods.php文件找到下面代码 $smarty->assign('goods_rank', get_goods_rank($goods_id)); // 商品的销售排名 在上面的代码 ...

  10. 在ecshop商品详情页显示供货商

    好久没写文章了,隐约记得前几天有人问到这个问题:[如何在ecshop商品详情页面显示该商品的供货商?] 今天有时间整理下,分享给大家. 注:以下修改适用于ecshop2.7.2,其他版本未做测试. 1 ...

随机推荐

  1. C/C++ 项目构建指南:如何使用 Makefile 提高开发效率

    Makefile是一个常用的自动化构建工具,它可以为开发人员提供方便的项目构建方式.在C/C++项目中,Makefile可以用来编译.链接和生成可执行文件.使用Makefile的好处是可以自动执行一系 ...

  2. XRebel工具激活方式,亲测有效

    首先进入生成 GUID 的网址:https://www.guidgen.com/ 用这个网址 + 生成的 GUID 激活:https://jrebel.qekang.com/ 例如:https://j ...

  3. 宝塔面板配置MongoDB数据库

    1-安装MongoDB 在面板中的[软件商店]搜索MongoDB并安装,推荐下载4.x以上的版本(可视化工具MongoDB Compass对高版本兼容比较好). 下载完成后,可以点击[设置],[版本切 ...

  4. HarmonyOS Connect “Device Partner”专场FAQ来啦!

     原文链接:https://mp.weixin.qq.com/s/mQJlAso293qgPlA1paxv5g,点击链接查看更多技术内容:     Device Partner平台是面向AIoT产业链 ...

  5. Centos7配置vnc

    VNC服务:VNC(Virtual Network Console)是虚拟网络控制台的缩写.它 是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的.VNC 是在基于 UN ...

  6. 【4】Spring框架的起源

    在我们的<Java Spring框架入门教程>中对 Spring 框架进行了十分详尽的介绍和剖析,但在学习 Spring Boot 之前,在这里回顾一下 Spring 是怎么出现的. Sp ...

  7. nginx 如何代理websocket

    前言 下面是配置nginx websocket 的代码. # HTTPS server map $http_upgrade $connection_upgrade { default upgrade; ...

  8. ImportError: Cannot load backend 'TkAgg' which requires the 'tk' interactive framework, as 'headless' is currently running

    MMdetection多卡训练常遇到的两个错误,百度无果,没解决,去github里mmdetection的issue模块搜索了一下找到正解. 这里记录一下,方便后者. 1️⃣ ImportError: ...

  9. 一个.NET内置依赖注入的小型强化版

    前言 .NET生态中有许多依赖注入容器.在大多数情况下,微软提供的内置容器在易用性和性能方面都非常优秀.外加ASP.NET Core默认使用内置容器,使用很方便. 但是笔者在使用中一直有一个头疼的问题 ...

  10. pid循迹小车的实现,arduino

    帮我写一个Arduino循迹小车的程序,小车前面有并列8个红外发射接收传感器,每个红外发射接收传感器为1cm宽,地面循迹的线是大约2cm宽黑色的线,地面其他位置是白色的,要求循迹小车运行的速度快,使用 ...