账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    利用swiper缩放图片,缩放位置有偏差
    31
    0

    题目描述

    项目中需要将长图实现移动端指尖滑动缩放,但所放位置与实际放大位置有偏差,比如缩放的是图片上部,实际缩放到的是图片中部,偏差很大,而且出现图片最初不能滑动的问题。

    问题出现的环境背景及自己尝试过哪些方法

    用的vue-awesome-swiper@2.6.7依赖的是swiper@3.1.3,没有弄太明白图片最开始为什么不能滑动的问题,但通过监听用户的scroll事件,给swiper的父元素添加

    content.setAttribute('style', '-webkit-overflow-scrolling: touch;')

    这个属性勉强解决了,但效果也不是太好,需要用户先滑动一下才能流畅滑动

    相关代码

    // 请把代码文本粘贴到下方(请勿用图片代替代码)

    <template>
      <div class="productPage">
        <my-title :titleData="titleData"></my-title>
        <div class="content">
          <div class="contentBox" ref="contentBox">
            <swiper :options="swiperOption" ref="mySwiper" style="height: 100%;">
              <swiper-slide>
                <div class="swiper-zoom-container" data-swiper-zoom="3">
                  <img :src="$route.params.url === undefined ? '' :require('../../assets/knowledgeQuiz/' + $route.params.url)">
                </div>
              </swiper-slide>
            </swiper>
          </div>
        </div>
      </div>
    </template>
    
    <script>
    import myTitle from '../activity/components/title'
    import 'swiper/dist/css/swiper.css';
    import { swiper, swiperSlide } from 'vue-awesome-swiper'
    export default {
      name: 'productPage',
      data () {
        return {
          titleData: { // 头部信息
            leftHome: 0,
            leftArrow: 1,
            rightContent: 1
          },
          pageData: '',
          // imgPath: ''
          isActivety: false,
          swiperOption: {
            zoom: true
          }
        }
      },
      components: {
        myTitle,
        swiper,
        swiperSlide
      },
      created () {
        this.$loading.hide()
      },
      mounted () {
        this.init()
      },
      methods: {
        init (id) {
          let content = document.querySelector('.content')
          content.addEventListener('scroll', () => {
            content.setAttribute('style', '-webkit-overflow-scrolling: touch;')
          })
        }
      }
    }
    </script>
    
    <style lang="less" scoped>
    .productPage{
      display: flex;
      flex-direction: column;
      height: 100%;
      .content{
        height: 100%;
        overflow: scroll;
      }
      .contentBox{
        img{
          display: block;
          width:100%;
        }
      }
    }
    </style>
    

    你期待的结果是什么?

    希望能解决两个问题:
    1.初始化swiper的时候不能滑动
    2.放大图片的时候放大的位置有偏差

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 淡淡伤〝微微凉 普通会员 1楼

      Swiper是一个用于制作轮播图的JavaScript库,它默认会在每个子页面都自动缩放图片。如果你想要在缩放位置有偏差,你可能需要在Swiper的options对象中设置缩放选项。以下是一个示例:

      javascript var slider = new Swiper('.slider', { slideClass: 'slide', responsive: true, pagination: false, mousewheel: true, onSlideChangeStart: function() { // 在缩放位置有偏差时的处理代码 }, onSlideChangeEnd: function() { // 在缩放位置有偏差时的处理代码 } });

      在这个示例中,我们设置了滑块的缩放选项为responsive: true,这会使得Swiper在屏幕尺寸改变时自动缩放图片。我们还设置了mousewheel: true,这会使得用户可以通过鼠标滚轮来控制滑块的缩放。最后,我们设置了onSlideChangeStartonSlideChangeEnd函数,当用户在缩放位置有偏差时,这两个函数会被调用。

      注意,这只是一个基本的示例,你可能需要根据你的具体需求来调整这些选项。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部