当前位置: 首页 > ds >正文

11前端项目总结----详情页放大镜和轮播图

商品详情页

    • DOM元素尺寸和位置相关属性
        • 1. 尺寸相关属性
        • 2.位置相关属性
        • 3.鼠标事件相关位置属性
    • 放大镜
    • 排他
    • Swiper和组件通信

DOM元素尺寸和位置相关属性

1. 尺寸相关属性

图片来源Coniary
offsetWidth/offsetHeight:内容宽度/高度+padding+border+(滚动条)
clientWidth/clientHeight:内容宽度/高度+padding
scrollWidth/scrollHeight:只包含内容宽度/高度(包括被隐藏部分)

2.位置相关属性
  • 相对父元素
    - offsetParent:最近的定位祖先元素(position不为static)
    - offsetLeft/offsetTop:元素相对offsetParent的左上角位置
  • 相对视口
    - getBoundingClientRect():返回元素相对于视口的位置和尺寸信息
  • 滚动相关
    - scrollLeft/scrollTop:元素内容向左/上滚动的像素数
3.鼠标事件相关位置属性
  • 相对于元素
    - offsetX/offsetY:鼠标相对于目标元素边界的坐标
  • 相对于浏览器视口
    - clientX/clientY:鼠标相对于浏览器视口的坐标
  • 相对于整个文档
    - pageX/pageY:鼠标相对于整个文档的坐标(包含滚动距离)

放大镜

通过鼠标移动位置改变蒙版位置,首先要知道DOM元素一些尺寸、位置属性以及鼠标事件的相关位置属性
在这里插入图片描述

<template><div class="spec-preview"><!--主图--><img src="../images/s1.png" /><!--事件  鼠标移动--><div class="event" @mouseover="handler"></div><!--放大镜--><div class="big" ref="big"><img src="../images/s1.png" /></div><!--绿色蒙版--><div class="mask" ref="mask"></div></div>
</template>

蒙版跟随鼠标移动。handler默认参数event,记录鼠标的移动参数
在这里插入图片描述

methods:{handler(event){let mask = this.$refs.mask;let big = this.$refs.big;//蒙版距离图片的距离let left = event.offsetX-mask.offsetWidth/2;let top = event.offsetY-mask.offsetheight/2;//left和top可能为负数if(left<=0) left=0;if(left>=mask.offsetWidth) left=mask.offsetWidth;if(top<=0) top = 0;if(top>=mask.offsetHeight) left=mask.offsetHeight;//修改元素的样式left/top属性值:注意加上pxmask.style.left = left+'px';mask.style.top = top+'px';//big是蒙版mask的两倍,那么big大图移动的距离也是两倍//big的移动方向和mask相反所以是负数big.stye.left = -2*left+'px';big.style.top = -2*top+'px';}
}

排他

项目中:产品的属性名和属性值,如颜色、版本选择,选择其中一个属性的属性值,就会产生高亮效果

解释一下:saleAttrList:Array[],数组里面是商品属性saleAttr,属性是个对象{},对象里面有属性名saleAttrName,和属性值数组形式的saleAttrValueList,数组里面是对象形式,遍历数组可得到每个对象的saleAttrValueName属性值

<div><!--商品属性 属性值--><dl v-for="saleAttr in saleAttrList" :key="saleAttr.id"><dt>{{saleAttr.saleAttrName}}</dt><dd :class="{active: saleAttrValue.isChecked==1}" v-for="saleAttrValue in saleAttr.saleAttrValueList" :key="saleAttrValue.id" @click="changeActive(saleAttrValue,saleAttr.saleAttrValueList)">{{saleAttrValue.saleAttrValueName}}</dd></dl>
</div>

绑定的@click="changeActive(saleAttrValue,saleAttr.saleAttrValueList)需要传入点击的属性值value和该属性的saleAttrValueList数组

methods:{changeActive(clickedValue,valueArr){//valueArr中除了cickedValue,其余的isCheck赋值为0valueArr.forEach(item=>{item.isChecked = 0;});clickedValue.isCheck = 1;}
}

Swiper和组件通信

在这里插入图片描述

  • 新增属性:
    slidesPerView:表示设置轮播图一次显示几张图片
    slidesPerGroup:表示每点击下一页切换图片个数(默认为1)
  • 鼠标移上边框效果

定义响应式数据

data(){return {currentIndex:0}
}

绑定触发事件传参index修改currentIndex,currentIndex==index则添加class属性
(index为v-for遍历图片的索引值)

<img :class="{active:currentIndex==index}" @click=“changeIndex(index)/>
methods:{changeIndex(index){this.currentIndex = index;}
}
  • 兄弟组件通信
    在这里插入图片描述
    因此当点击轮播图触发changeIndex事件时,还需要向兄弟组件(也就是上方)传递索引值

全局事件总线
在changeIndex方法中添加this.$bus.$emit('getIndex',this.currentIndex)表示当点击时还需触发getIndex事件传递参数
那么还需要在兄弟组件内接收,

data(){return {currentIndex : 0}
},
mounted(){this.$bus.$on('getIndex',index=>{//这里便可以拿到index进行赋值到兄弟组件的响应式数据内this.currentIndex = index;})
}
http://www.xdnf.cn/news/2581.html

相关文章:

  • 基于STM32、HAL库的HX711模数转换器ADC驱动程序设计
  • TV Launcher汉化版下载-TV Launcher启动器极简pro下载
  • 【Misc】PNG宽高修改 - PNG图片宽高CRC爆破
  • 消息中间件
  • 传统行业的数字化转型:如何通过RTMP推流技术提升实时直播体验
  • Spring MVC 请求映射处理:@RequestMapping 与 @Pathvariable
  • H5实现一个二维码生成器页面
  • 华为OD机试真题——阿里巴巴找黄金宝箱Ⅰ(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • MySQL 存储引擎与服务体系深度解析
  • 登高架设作业指的是什么?有什么安全操作规程?
  • 基于QT(C++)实现数字图像处理—Canny边缘检测
  • 【WEB3】web3.0是什么
  • FreeMarker语法深度解析与Node.js集成实践指南
  • 衡石科技:HENGSHI SENSE 数据权限解决方案
  • Shadertoy着色器移植到Three.js经验总结
  • 【Linux系统】详解Linux权限
  • AI工作流自动化与智能应用开发平台
  • WEB服务器的部署及优化
  • 线上JVM调优与全栈性能优化 - Java架构师面试实战
  • DataStreamAPI实践原理——快速上手
  • 学习笔记—双指针算法—移动零
  • [原创](现代Delphi 12指南):[macOS 64bit App开发]: NSString类型与CFStringRef类型字符串相互转换.
  • 通过数据增强打造抗噪音多模态大模型
  • MySQL 大数据量分页查询优化指南
  • Git 撤回合并提交
  • WPF之XAML基础
  • AlexNet网络搭建
  • OneNet云平台
  • java16
  • Java快速上手之实验五