Vant Swiper 动态控制滑动方向:精准监听与条件限制实战

van-swipe 自定义左右切换按钮 【代码】van-swipe 自定义左右切换按钮。 阅读详情

1. 为什么需要动态控制轮播图的滑动方向?

在移动端开发中,Vant 的 Swiper 轮播组件几乎是每个项目的标配,它开箱即用,滑动流畅,省去了我们大量造轮子的时间。但实际业务需求往往比组件预设的功能要复杂得多。我遇到过不少这样的场景:产品经理跑过来说,“咱们这个引导页,用户没登录的时候,只能往右滑看下一页,不能往回滑”,或者“这个商品详情图,用户滑到最后一页时,得弹个窗提示一下,不能再继续往左滑了”。

这时候,如果你去翻 Vant 的官方文档,会发现 Swiper 组件本身提供了 disabled 属性可以禁用整个滑动,也提供了 loop 属性来控制是否循环。但是,它没有提供一个现成的、可以动态控制单方向滑动的开关。你没法直接告诉它:“现在只允许右滑,禁止左滑”。这种基于业务状态(比如登录状态、页面位置、某个按钮是否被点击)来实时切换滑动权限的需求,就需要我们开发者自己动手了。

直接换组件库?成本太高。项目可能已经基于 Vant 开发了一大半,UI 风格和交互逻辑都定型了。所以,最务实、最经济的办法就是在 Vant Swiper 的基础上,通过监听原生触摸事件,自己来实现这套“动态方向锁”。这不仅能精准满足业务需求,还能让你对移动端触摸交互的理解更深一层。接下来,我就把自己在实际项目中摸爬滚打总结出来的方法,一步步分享给你。

2. 核心原理:如何通过触摸事件判断滑动方向?

要想控制滑动方向,首先得能精确地判断用户是想左滑还是右滑。这里我们离不开移动端的三个核心触摸事件:touchstart、touchmove 和 touchend。它们的触发顺序就像一场舞蹈:手指按下(start)、手指移动(move)、手指抬起(end)。

判断方向的逻辑其实很直观,有点像我们小时候在数轴上比较大小。核心思路是:在 touchstart 时,记录下手指按下的初始 X 坐标(clientX);然后在 touchmove 过程中,实时获取当前手指的 X 坐标;最后,比较当前坐标和初始坐标。

  • 如果当前 X 坐标小于初始 X 坐标:说明手指在向左移动,因为屏幕坐标系的原点在左上角,向右是X轴正方向。所以,currentX < startX 对应的是左滑。
  • 如果当前 X 坐标大于初始 X 坐标:说明手指在向右移动,对应的是右滑。

这个判断逻辑是整个功能的地基,看似简单,但有几个细节坑我帮你踩过了。第一,事件对象在不同浏览器或环境下获取方式可能不同,所以要用 e = e || window.event 做兼容。第二,要确保只处理单指触摸,用 if(e.touches.length == 1) 来判断,避免多指手势的干扰。第三,clientX 是相对于浏览器视口的坐标,对于我们的滑动判断来说,它比 pageX 或 screenX 更合适。

理解了原理,我们来看看在 Vant Swiper 里怎么接入这套逻辑。Vant Swiper 的每个 van-swipe-item 都可以直接绑定这些触摸事件。但这里有个关键点:为了不影响 Swiper 组件内部原有的滑动动画和惯性滚动,我们通常不在 touchend 里做最终的方向判断和阻止滑动,而是在 touchmove 阶段就进行预判和干预,这样体验会更跟手。

3. 实战第一步:在 Vant Swiper 中接入触摸监听

理论说再多,不如一行代码。我们直接来看怎么在 Vue 项目中,给 Vant Swiper 装上我们的“方向感应器”。

首先,是模板部分。我们需要在 van-swipe 组件上,通过 :touchable 属性绑定一个变量来控制整个组件是否可触摸滑动。同时,在每个 van-swipe-item 上,手动绑定 @touchstart、@touchmove 和 @touchend 事件。

<template>
  <div>
    <van-swipe
      class="my-swipe"
      ref="vantSwiper"
      :touchable="touchable"
      @change="onSwipeChange"
    >
      <van-swipe-item
        v-for="(item, index) in list"
        :key="index"
        @touchstart="onTouchStart"
        @touchmove="onTouchMove"
        @touchend="onTouchEnd"
      >
        <div class="content">内容区块 {{ index + 1 }}</div>
      </van-swipe-item>
    </van-swipe>
  </div>
</template>

<style scoped>
.my-swipe .van-swipe-item {
  color: #fff;
  font-size: 20px;
  line-height: 200px;
  text-align: center;
}
.my-swipe .van-swipe-item:nth-child(odd) {
  background-color: #39a9ed;
}
.my-swipe .van-swipe-item:nth-child(even) {
  background-color: #66c6f2;
}
</style>

注意看,我给 van-swipe 加了一个 ref="vantSwiper",后面我们会用它来调用 Swiper 实例的方法,强制重新计算布局,这是实现动态禁用的关键一步。

接下来,是脚本部分的数据和事件处理函数。我们先初始化必要的变量。

<script>
export default {
  data() {
    return {
      list: [1, 2, 3, 4], // 轮播内容
      startX: 0, // 触摸起始点X坐标
      touchable: true, // 控制Swiper整体是否可滑动
      currentIndex: 0, // 当前轮播页索引
    };
  },
  methods: {
    // Swiper索引改变时触发
    onSwipeChange(index) {
      this.currentIndex = index;
      console.log(`当前滑到了第 ${index + 1} 页`);
      // 这里可以接入业务逻辑,比如到了最后一页就禁止左滑
    },
    // 手指按下
    onTouchStart(e) {
      e = e || window.event;
      // 防止默认行为,比如页面滚动
      e.preventDefault();
      if (e.touches.length === 1) {
        // 只处理单指触摸
        this.startX = e.touches[0].clientX;
      }
    },
    // 手指移动
    onTouchMove(e) {
      e = e || window.event;
      e.preventDefault();
      // 方向判断和动态控制逻辑,将在这里实现
    },
    // 手指抬起
    onTouchEnd() {
      // 触摸结束,可以在这里处理一些清理工作
    },
  },
};
</script>

到这一步,我们已经成功把触摸事件“挂载”到了轮播图上。你可以先在 touchmove 方法里加一句 console.log('手指在动'),然后在手机上滑动测试一下,看看事件是否被正确触发。如果没问题,我们就有了感知用户意图的能力。接下来,就要在 touchmove 里填入最核心的判断逻辑,让轮播图变得“聪明”起来。

4. 实现动态方向控制:从判断到执行

现在进入最关键的环节:在 touchmove 事件里,实时判断方向,并根据我们的业务条件,动态地允许或禁止滑动。我们一步步来拆解。

首先,在 onTouchMove 方法里,我们需要获取当前手指的实时位置,并和起始位置做比较。

onTouchMove(e) {
  e = e || window.event;
  e.preventDefault();

  if (e.touches.length !== 1) {
    return; // 不是单指操作,直接返回
  }

  const currentX = e.touches[0].clientX;
  const diffX = currentX - this.startX; // 计算位移差

  // 判断滑动方向
  if (diffX < 0) {
    console.log('正在左滑');
    // 左滑时的业务逻辑
  } else if (diffX > 0) {
    console.log('正在右滑');
    // 右滑时的业务逻辑
  }
}

好了,方向能判断了。那怎么“禁止”滑动呢?这里用了一个小技巧:我们通过控制绑定在 van-swipe 上的 :touchable 属性来实现。当 touchable 为 false 时,整个 Swiper 的触摸滑动功能就被禁用了。但是,我们不能一直禁用它,而是要根据方向动态开关。

假设我们的业务需求是:禁止左滑,但允许右滑。那么逻辑就是:当检测到用户正在左滑时,把 touchable 设为 false;当检测到用户正在右滑时,把 touchable 设为 true。

onTouchMove(e) {
  e = e || window.event;
  e.preventDefault();

  if (e.touches.length !== 1) return;

  const currentX = e.touches[0].clientX;
  const diffX = currentX - this.startX;

  // 示例:无条件禁止左滑
  if (diffX < -10) { // 加一个阈值,避免轻微抖动误触发
    console.log('禁止左滑');
    this.touchable = false;
  } else {
    // 其他情况(右滑或基本没动)允许滑动
    this.touchable = true;
  }

  // 关键步骤:通知 Swiper 实例更新状态
  this.$nextTick(() => {
    if (this.$refs.vantSwiper && this.$refs.vantSwiper.resize) {
      this.$refs.vantSwiper.resize();
    }
  });
}

注意代码里我加了一个 diffX < -10 的判断,而不是 diffX < 0。这是一个简单的阈值过滤,因为手指触摸屏幕时会有细微的抖动,设置一个合理的阈值(比如10像素)可以防止误判,让交互更精准。这个值你可以根据实际手感调整。

还有更关键的一行:this.$refs.vantSwiper.resize()。这是 Vant Swiper 实例提供的一个方法。当我们动态改变 touchable 这个 prop 时,Swiper 组件内部并不会立即响应。手动调用 resize() 方法,会强制 Swiper 重新计算和渲染,让 touchable 的变化立刻生效。没有这一步,你会发现禁止滑动的效果有延迟,或者根本不生效。

5. 进阶:结合业务逻辑的条件限制

如果只是简单禁止某个方向,那上面的代码已经够用了。但真实项目里的需求往往是有条件的、动态的。比如:“用户未登录时,禁止左滑返回上一页”,或者“当前页面是第一个时,禁止右滑(因为右边没内容了)”。这就需要我们把方向判断和业务状态结合起来。

让我们构建一个更真实的场景:一个应用引导页,共有4页。业务规则是:

  1. 用户在任何页面都可以右滑(向前翻看)。
  2. 只有当前页面索引 currentIndex > 0 时,才允许左滑(向后翻看)。也就是说,在第一页时禁止左滑。

这时,我们的 onTouchMove 就需要升级了:

onTouchMove(e) {
  e = e || window.event;
  e.preventDefault();
  if (e.touches.length !== 1) return;

  const currentX = e.touches[0].clientX;
  const diffX = currentX - this.startX;

  // 结合业务状态的条件判断
  if (diffX < -10) {
    // 左滑意图
    if (this.currentIndex === 0) {
      // 当前是第一页,禁止左滑
      console.log('当前是第一页,禁止左滑返回');
      this.touchable = false;
    } else {
      // 不是第一页,允许左滑
      this.touchable = true;
    }
  } else if (diffX > 10) {
    // 右滑意图,始终允许
    this.touchable = true;
  } else {
    // 微小移动,保持原状态
    // this.touchable = true; // 或者根据情况决定
  }

  // 触发视图更新
  this.$nextTick(() => {
    this.$refs.vantSwiper && this.$refs.vantSwiper.resize();
  });
}

你可以把 this.currentIndex === 0 这个条件,替换成任何你的业务状态,比如 !this.isLoggedIn(未登录)、this.isTaskFinished(任务已完成)等等。这就实现了滑动权限与业务逻辑的深度绑定。

我建议把这块复杂的判断逻辑抽离成一个独立的计算函数,比如叫 shouldAllowSwipe(direction, currentState),这样 onTouchMove 方法会更清晰,也方便后续维护和添加更复杂的规则。

6. 避坑指南与性能优化

这套方案我用在好几个线上项目了,整体很稳定,但也踩过一些坑。这里集中分享一下,帮你省点时间。

第一个坑:事件冲突与冒泡。 我们的 touchmove 里调用了 e.preventDefault(),这会阻止浏览器默认的滚动行为。如果你的 Swiper 外面还有一个可以滚动的容器,可能会出问题。解决方法是,在判断需要禁止滑动时再调用 preventDefault,或者通过 e.stopPropagation() 阻止事件冒泡,避免影响到父容器。

第二个坑:快速连续滑动。 在快速滑动时,touchmove 事件触发频率极高。如果我们在每次触发时都执行复杂的业务逻辑判断和 resize() 调用,可能会造成轻微卡顿。我的优化建议是引入一个简单的节流(throttle) 机制。比如,用 setTimeout 或 Lodash 的 _.throttle 包装一下 onTouchMove 的核心逻辑,确保在短时间内(比如16ms,一帧的时间)只执行一次判断和状态更新,这对性能提升很明显,用户也感知不到延迟。

第三个坑:与 Swiper 动画的衔接。 有时候,你会发现禁止滑动后,Swiper 的动画会有点“抽搐”。这通常是因为触摸事件判断的时机和 Swiper 内部动画帧没有完全同步。除了调用 resize(),你还可以尝试在状态改变后,稍微延迟一下再调用,比如用 this.$nextTick(() => {...}) 包裹,确保 Vue 的 DOM 更新队列完成后再操作 Swiper 实例。

第四个坑:桌面端兼容。 如果你需要支持 PC 端的鼠标拖动,记得还要监听 mousedown、mousemove 和 mouseup 事件,逻辑和触摸事件类似,只是获取坐标的方式从 e.touches[0].clientX 换成了 e.clientX。Vant 的 Swiper 在 PC 端本身对手势支持可能有限,这个方案正好能作为一个补充。

最后,记得做好边界情况处理。比如,在组件销毁前,移除可能的事件监听器(如果用了全局监听的话);在 touchend 时,可以考虑将 touchable 重置为 true,为一个新的触摸周期做准备,避免状态残留。

7. 更优雅的实现:封装成自定义指令或Hook

如果你在多个页面都用到了这个功能,每次都复制粘贴一大段事件处理代码可不是好主意。我们可以考虑将其封装起来,实现逻辑复用。这里提供两个思路,分别适用于 Vue 2/3 的不同风格。

思路一:封装成自定义指令(适合 Vue 2 项目)

我们可以创建一个名为 v-swipe-control 的指令,把它绑定到 van-swipe 或 van-swipe-item 上,指令的值传入一个配置对象,包含判断条件等。

// directives/swipeControl.js
export default {
  bind(el, binding, vnode) {
    const componentInstance = vnode.componentInstance;
    let startX = 0;
    const options = binding.value || {};

    const handleTouchStart = (e) => {
      if (e.touches.length === 1) {
        startX = e.touches[0].clientX;
      }
    };

    const handleTouchMove = (e) => {
      if (e.touches.length !== 1) return;
      const currentX = e.touches[0].clientX;
      const diffX = currentX - startX;
      const direction = diffX < 0 ? 'left' : 'right';

      // 调用外部传入的判断函数
      if (options.allowSwipe) {
        const shouldAllow = options.allowSwipe(direction, componentInstance.currentIndex, ...其他状态);
        componentInstance.touchable = shouldAllow;
        componentInstance.resize && componentInstance.resize();
      }
    };

    el._swipeControlHandlers = { handleTouchStart, handleTouchMove };
    el.addEventListener('touchstart', handleTouchStart);
    el.addEventListener('touchmove', handleTouchMove);
  },
  unbind(el) {
    const handlers = el._swipeControlHandlers;
    if (handlers) {
      el.removeEventListener('touchstart', handlers.handleTouchStart);
      el.removeEventListener('touchmove', handlers.handleTouchMove);
      delete el._swipeControlHandlers;
    }
  }
};

// 在main.js中注册
import swipeControl from './directives/swipeControl';
Vue.directive('swipe-control', swipeControl);

// 在组件中使用
<van-swipe-item v-swipe-control="{ allowSwipe: myAllowSwipeLogic }">

思路二:封装成 Composition API Hook(适合 Vue 3 项目)

对于 Vue 3,用 Composition API 封装成一个 Hook 函数更符合潮流,逻辑复用和状态管理也更清晰。

// hooks/useSwipeControl.js
import { ref, onMounted, onUnmounted } from 'vue';

export function useSwipeControl(swiperRef, allowSwipeChecker) {
  const startX = ref(0);
  const touchable = ref(true); // 这个需要能传递给 van-swipe 的 touchable prop

  const onTouchStart = (e) => {
    if (e.touches.length === 1) {
      startX.value = e.touches[0].clientX;
    }
  };

  const onTouchMove = (e) => {
    if (e.touches.length !== 1) return;
    const currentX = e.touches[0].clientX;
    const diffX = currentX - startX.value;
    const direction = diffX < 0 ? 'left' : 'right';

    const shouldAllow = allowSwipeChecker(direction, swiperRef.value?.currentIndex);
    touchable.value = shouldAllow;

    // 触发Swiper更新
    nextTick(() => {
      swiperRef.value?.resize?.();
    });
  };

  // 在组件中,你需要手动将 touchable 绑定到 van-swipe,并将事件绑定到 swipe-item
  return {
    touchable,
    onTouchStart,
    onTouchMove,
  };
}

// 在组件中使用
<script setup>
import { ref } from 'vue';
import { useSwipeControl } from './hooks/useSwipeControl';

const vantSwiperRef = ref(null);
const currentIndex = ref(0);

// 定义你的业务判断规则
const checkRule = (direction, index) => {
  if (direction === 'left' && index === 0) return false;
  return true;
};

const { touchable, onTouchStart, onTouchMove } = useSwipeControl(vantSwiperRef, checkRule);
</script>

封装之后,你的业务组件会变得非常干净,核心逻辑都沉淀在了指令或 Hook 里,维护性和可读性都大大提升。你可以根据自己项目的技术栈和团队习惯,选择最适合的封装方式。

vant-swipe自适应图片高度+图片预览 阅读详情

相关推荐

Vant Swiper 动态控制滑动方向:精准拦截与事件监听实战

本文详细解析了如何通过监听原生触摸事件,动态控制Vant Swiper组件的滑动方向。文章提供了完整的实战代码,重点解决了如何精准拦截特定方向的滑动(如禁止左滑),并分享了性能优化与常见避坑指南,帮助开发者在不更换组件的前提下实现精细化的交互控制。

weixin_29001419的博客 318

vant swipe 三图一屏

效果图: 需求: 老师布置作业让大伙跟着b站的一个up做一个网易云音乐首页,up用的vue-awesome-swiper做轮播图,我用的vant,在做到“发现好歌单”模块的时候发现vant没有一屏显示多图的效果,于是自己魔改了一些样式凑合一下 思路: 改轮播组件overflow: hiddle为visible,设置轮播组件的宽为三分之一屏宽,轮播组件外包裹一个大盒子overflow: hiddle 代码: <template> <div class="musicLis

qq_53512708的博客 4218

(vue2.0)vue-awesome-swiper(v3.1.3)的初级使用

npm install npm install vue-awesome-swiper@2.6.7 --save // 或者 npm install vue-awesome-swiper --save 引入 import VueAwesomeSwiper from 'vue-awesome-swiper' import 'swiper/dist/css/swiper.css' Vue.u...

webfullstack的博客 3887

vant UI 轮播组件swiper 滑动时触发click点击事件

vant UI 轮播组件swiper 滑动时触发click点击事件

_NIXIAKF的博客 3043

Anaconda启动失败,一直在loading application的问题

实战基础新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本

Tristan的博客 2765

Win10 桌面回收站右键没有“清空回收站”选项怎么解决

Win10 桌面回收站右键没有“清空回收站” 选项怎么解决? 我之前不知道怎么捣鼓注册表(胡乱删了一些。。。) 导致想清空回收站的时候,右键却没有“清空回收站”这个选项了 以下是解决方法: 1、在桌面上新建一个txt文本文档,将以下代码拷贝进去: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\empty] "Com...

菜鸟的后花园 2万+

vant swipe点击切换

<van-swipe ref="swiper"> <van-swipe-item v-for="item in a" :key="item.id"> </van-swipe-item> </van-swipe> <div data-index="0" @click="onChange">勤奋榜</div> <div data-index="1" @click="onChange">进步榜</div&.

qq_58209531的博客 1920

Cadence OrCAD常见引脚错误排查指南:从原理图到封装的完整解决方案

本文详细解析Cadence OrCAD设计中常见的引脚错误问题,提供从原理图到封装的系统化解决方案。涵盖错误诊断、元件库修复、封装管理及自动化处理技巧,帮助工程师高效解决ORCAP-36022等典型错误,确保设计流程顺畅。

weixin_29294975的博客 252

Vant Swiper实战:如何精准控制左右滑动方向(附完整代码示例)

本文详细解析了如何在Vant Swiper组件中实现精准的滑动方向控制,特别是针对禁止左滑等特殊业务需求。通过监听触摸事件、计算滑动方向并结合动态控制`touchable`属性,提供了完整的Vue 3代码示例,帮助开发者灵活应对引导页、流程表单等场景下的交互限制。

gitlab7runner的博客 704

第2章 数据库关系模型-单元测验-数据库原理及应用

第2章 数据库关系模型---数据库与机器学习 作业 常用的关系查询操作包括选择、投影、连接、并、交等。 v 实体完整性是指关系表的属性组成必须是完整的。 x 自然连接是一种等值连接。 v 在参照完整性中,可以定义级联操作。 v 用户自定义完整性可以实施数据的业务约束。 v 每个关系是一个二维表,但二维表不一定是关系。 v 关系中复合键至少包含两个属性。 v 代理键是为了唯一标识关系的不同元组,需要在表单或报表中显示出来。 x ...

aiqq136的博客 5720

hMailServer安装配置

hMailServer安装配置 使用宝塔面板上的宝塔邮件服务器2.1版本,进行安装hMailServer。 宝塔在安装hMailServer是有做了一些配置,如果是手工安装需要注意一下配置点: 1、\hMailServer\Bin 目录下增加mysql连接文件libmysql.dll,要去下载32位的。 libmysql.dll下载 链接:https://pan.baidu.com/s/1YGJXzjowlJ9n_MiqB4xiqw 提取码:wz90 2、 需要提前安装mysql,并创建hM.

王者的博客 5856

Vant Swiper实战:如何精准控制左右滑动(附完整代码与避坑指南)

本文深入探讨了Vant Swiper组件在移动端开发中的高级应用,重点讲解了如何实现精准的左右滑动控制。针对官方API的限制,文章提供了两种核心解决方案:一是通过监听触摸事件并计算滑动方向来动态拦截特定滑动(如禁止左滑);二是利用Swiper实例的change事件进行后置验证与回退。文中附有完整的实战代码,帮助开发者应对教程引导、表单分步等需要精细化流程控制的场景。

game4的博客 765

【PCB专题】Allegro导出3D文件

Allegro中如何导出3D文件,有没有一键导出操作?

一点硬件 4978

移动端手势控制进阶:用Vant Swiper实现智能滑动限制功能

本文详细介绍了如何利用Vant Swiper组件实现移动端智能滑动限制功能,特别针对金融和教育类应用中需要精确控制左滑右滑的场景。通过动态监听触摸事件和坐标计算,开发者可以灵活设置禁止左滑等限制条件,提升用户体验和操作安全性。

y9z0a1b的博客 558

【安全机制分析案例】从PDF预览页面提取原始PDF文件的方法原理与实践 篇二:基于致远互联(Seeyon)封装的SuwellLightRead技术

该HTML代码片段展示了致远OA协同办公系统的前端页面结构,包含多个CSS样式表和JavaScript文件的引用。页面设置了IE兼容模式,加载了全局环境变量、UI组件库和公告模块相关资源。代码中定义了系统路径、静态资源后缀等全局变量,并包含公告查看功能的相关配置参数。页面还引用了水印、文档处理、即时通讯等功能的JS文件,并设置了文件下载框架。整体呈现了一个典型的OA系统前端实现方案,包含浏览器兼容处理、资源加载和功能模块初始化等逻辑。

生活在别处 2058

深入URP之Shader篇5: SimpleLit Shader分析(1)

本篇开始分析simple lit shader。我们通过分析unlit shader了解了URP shader的结构,以及一些基础功能。而simple lit shader包含了更多的内容。本篇开始,就不会特别仔细的逐行去分析shader文件了,只会针对pass的功能中比较有意思且之前没看到过的内容进行分析。名字为的pass,它的Tags为: 根据URP的文档:说明这是一个前向渲染路径的pass,虽然URP(至少是10.8.1版本)还没有正式支持Deferred Rendering,但URP已经为它打了很多

聚焦游戏和图形引擎开发技术 1890

vant轮播van-swipe无法轮播的小坑解决办法

将van-swipe组件放在要动态显示的div中发现无法轮播,尝试放到其他地方是正常的,经尝试是v-show导致组件无法正常轮播。因此解决方法即为将v-show改为v-if。然后就能正常显示动画了。

qq_51410764的博客 2168

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

vue3项目,电脑端使用vant4中的Swipe 轮播组件问题

vue3项目,电脑端使用vant4中的swipe

qq_40926572的博客 915

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

vant swiper 监听左滑右滑&禁止左滑功能

前言:个别需求会要求禁止swiper的左滑或者右滑功能,虽然原生swiper可支持,但因版本问题,个别引用有问题;或者此时功能已开发完成,再换组件开发成本较大,所以需要再vant的基础上进行兼容。具体实现如下 <van-swipe class="my-swipe" style="height: 200px;" vertical :touchable='touchable' @change='changeSwipe'> <van-swipe-item @touchstart.

hyduan_h5的博客 6450

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[vue+vant] 使用 Swiper 组件轮播本地图片

目录1. 序言2. 在 assets 目录上传图片3. 在 Swiper 组件中设置图片列表4. 在页面中引用 Swiper 组件 1. 序言 Swiper 组件中的官方示例中, 轮播的图片是以 URL 链接的方式导入组件, 如果把示例中的 URL 链接直接换成本地图片路径, 会发现图片无法正常显示, 下面记录一下轮播本地图片的方法. 2. 在 assets 目录上传图片 将需要轮播的图片上传到 assets 目录下, 假设有 p1.png, p2.png, p3.png 三张图片 3. 在 Swiper

weixin_42902669的博客 3804

vant中的swipe

我是在Vue中使用的vant 会做一点点小改动 <van-swipe @change="onChange" ref="swiper"> <van-swipe-item v-for="(item,index,key) in List" :key="index"> </van-swipe-item> </van-swipe> 通过onChang...

HarryHY的博客 8480

Vant轮播多个div结合二维数组的运用

在开发H5的时候,结合Vant组件的轮播组件Swipe实现如下功能。这里的需求是要实现每屏展示多张图片或者说多个div卡片,那么这个时候就要考虑到多维数组嵌套循环,也就是两层循环。

Amelian的博客 1187

van-swipe中嵌套van-tabs,van-tabs无法单独滑动

只需要在加一行代码即可实现"@touchmove.native.stop"当滑动tabs时阻止冒泡事件。

tan_xiao_tan的博客 957

swiper、vant组件的基本使用方式以及$nextTick()的使用

swiper swiper是轮播图插件 swiper的安装 npm i swiper@5.4.5 --save ps:(生产依赖是要放在服务器上的) swiper官网Swiper演示 - Swiper中文网收录了Swiper的40多个在线示例(swiper demos),Swiper是纯javascript打造的滑动特效插件,面向手机、平板电脑等移动终端,以及PC端网站能实现触屏焦点图、触屏Tab切换、触屏多图切换等常用效果。https://www...

m0_63851202的博客 3331

van-swipe__track------Vant轮播图使用时遇到的一个坑

使用vant组件库遇到的问题

LK_315的博客 8647
上一篇: 从零实现扫雷游戏:HTML+CSS+JS全流程解析
下一篇: 信息学奥赛一本通(C++版)在线评测系统 - 实战题解与技巧精讲
于欣烈
博客等级 码龄10年 36粉丝 1936原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值