美文网首页
商品放大镜

商品放大镜

作者: 苗喵秒 | 来源:发表于2019-10-30 14:17 被阅读0次
// html代码
<div style="width:400px;height:400px;">
  <div onmouseenter="addImgMagnifier(this, './1.jpg')">
    <img width="100%" height="100%" src="https://image.azureedge.net/0171484_-63g_S.jpeg"/>
  </div>
</div>
// css 样式
.zoom-mask {
  width: 200px;
  height: 200px;
  background: pink;
  opacity: 0.5;
  position: absolute;
  z-index: 2;
}

.zoom-div {
  width: 600px;
  height: 600px;
  border: 1px solid #dddddd;
  background-repeat: no-repeat;
  background-size: 1200px 1200px;
  z-index: 2;
  position: absolute;
  background-color: #FFFFFF;
  opacity: 1;
  top: 0;
  right: -600px;
}
// js 方法
/**
 * 方法说明
 * @method addImgMagnifier
 * @param {string} self 图片元素的父元素
 * @param {string} imgUrl 放大图片的地址
 * @return {null} 无返回值
*/
function addImgMagnifier(self, imgUrl) {
  let zoomMaskEle = null;
  let zoomDivEle = null;
  function setPosition() {
    $(self).css("position", "relative")
    $(self).parent().css("position", "relative")
  }
  function addZoomMaskEle() {
    zoomMaskEle = $("<div class='zoom-mask'></div>")
    $(self).append(zoomMaskEle)
  }
  function addZoomDivEle() {
    zoomDivEle = $("<div class='zoom-div'></div>")
    zoomDivEle.css('background-image', "url(" + imgUrl + ")")
    $(self).after(zoomDivEle)
  }
  function removeZoomEle() {
    zoomMaskEle && zoomMaskEle.remove()
    zoomDivEle && zoomDivEle.remove()
  }
  function addZoomEle() {
    setPosition()
    addZoomMaskEle()
    addZoomDivEle()
  }
  addZoomEle()
  $(self).mousemove(function(event) {
    // 获取当前鼠标的位置
    let xAxis = event.pageX - $(self).offset().left - zoomMaskEle.width() / 2
    let yAxis = event.pageY - $(self).offset().top - zoomMaskEle.height() / 2
    console.log(xAxis, yAxis)
    // 判断放大镜遮罩是否移出左右边界
    if(xAxis < 0) {
      // 放大镜遮罩移出左边界
      zoomMaskEle.css('left', '0')
    } else if(xAxis > ($(self).width() - zoomMaskEle.width())) {
      // 放大镜遮罩移出右边界
      zoomMaskEle.css('left', ($(self).width() - zoomMaskEle.width()) + 'px')
    } else {
      zoomMaskEle.css('left', xAxis + 'px')
    }
    // 判断放大镜遮罩是否移出上下边界
    if(yAxis < 0) {
      // 放大镜遮罩移出上边界
      zoomMaskEle.css('top', '0')
    } else if(yAxis > ($(self).height() - zoomMaskEle.height())) {
      // 放大镜遮罩移出右边界
      zoomMaskEle.css('top', ($(self).height() - zoomMaskEle.height()) + 'px')
    } else {
      zoomMaskEle.css('top', yAxis + 'px')
    }
    let zoomScale = 1200 / 400   // 比例计算 大图片的大小 除以 小图片的大小
    zoomDivEle.css('background-position', -(zoomMaskEle.position().left) * zoomScale + 'px' + ' ' + -(zoomMaskEle.position().top) * zoomScale + 'px')
  })
  $(self).mouseleave(function() {
    removeZoomEle()
  })
}

相关文章

  • 商品放大镜

  • 商品放大镜效果

    html片段 js片段 css片段

  • 2018-12-01

    JS实现放大镜功能 网店中的商品都能放大查看细节,这里是放大功能的简单实现。。。。 这个放大镜具有选择放大倍数的功...

  • 新媒体的基础认知

    什么是新媒体 在我看来新媒体是一个个平台,我把它比作一个放大镜,将你的“内容/商品/技能/才华”通过这个放大镜,增...

  • 鼠标移入商品的放大镜

  • js商品细节放大镜案例

    需求: 放大鼠标悬停部分 学习知识点: event参数 offset家族 代码:

  • 放大镜

    放大镜的效果跟平常我们在电商网站中的商品详情页将商品放大查看的效果是一样的,效果图如下: 布局结构如下: css样...

  • 商品图像放大镜效果(原生JS)

    要实现的效果: 效果分析: 代码实现:(可复制出来运行,两张图片小图 small.jpg 400x400;大图bi...

  • js-京东商品放大镜效果

    惯例先上效果 忽略我手残晃动(太强会被撞到地上),(也不知道为什么明明浏览器背景是白色,录出来的图就是蓝色,求推荐...

  • etalage插件使用

    在浏览某宝商品的时候,会有以下的动画,其实就是个放大镜的效果。当然,我们可以用原生的javascript实现这种效...

网友评论

      本文标题:商品放大镜

      本文链接:https://www.haomeiwen.com/subject/pfmovctx.html