npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

snap-swiper

v1.0.8

Published

基于css的scroll-snap-type实现自动轮播的效果插件

Downloads

7

Readme

基于css的scroll-snap-type实现自动轮播的效果插件

背景

实现一个很简单的自动轮播的效果

思考: 传统的 swiper 太重了,里面封装了很多我们不需要的功能,一个简单的功能没必要那么中的文件。那就自己实现吧

实现方式有千千万万,那么如何才用最少的代码最优雅的实现呢?是否可以推翻传统的实现,使用 css 的某些特效实现呢?

肯定可以的呀,我觉得我这个方式就是最好的实现方法,没有比这个更好的实现了。我有css大佬坐镇指点,你们没有。哈哈

怎么使用

  1. 本地下载 js/css 使用引入使用
<script src="./snap-swiper.js"></script>
<script>
  var imageList = []
  SnapSwiper(imageList, '.snap-swiper-index')
</script>

本地下载js使用Demo

  1. 可以 npm 安装使用

npm i snap-swiper

import "snap-swiper/snap-swiper.css";
const snapSwiper = require("snap-swiper");
snapSwiper({
    imageList:[],
    el,
  });

npm 下载使用demo

简单的参数:传入一个对象

let imageList= [{
    href: "https://www.yuewen.com/#&about", // 点击图片跳转的连接
    src:
      "https://bossaudioandcomic-1252317822.image.myqcloud.com/activity/document/d2e93dead4b760eb2385709f42f3aec7.jpg", // 展示图片的地址
    alt: "内容3"//图片的简介,在图片加载失败的时候可以看看
  }]
  let el=xxx // 滚动的元素唯一的标识
  let autoplay = false //是否自动轮播。默认自动轮播
  let params = {imageList,el,autoplay}

目前最主要就是前面两个参数必传。其他的一些方法暴露在原型上面,就不仔细说了,估计用的情况比较少。想知道的话看看源码。通俗易懂,一看就明白

为啥要有一个 autoplay 参数,是不是多余的呢?

肯定不是的,每一个东西存在都有它存在理由和必要性。这是这个插件隐藏功能的一个入口

这种场景之下,autoplay 他的用途就体现出来了。snap-swiper 有一个特点把所有的方法数据都挂在原型上面。怎么用呢?

  1. autoplay 设置为 false,默认不滚动了

  2. 调用原型上面的 clickHandler 方法,传入一个被点击的元素,和点击之后的回调。(假设是图片

  3. 调用原型上面的 setScrollLeft 方法,传入一个滚动的距离,元素自动滚动起来

  4. 2和3结合起来就实现了,点击某一个元素滚动指定的距离

  5. 你要的功能就实现了

实现思路

  1. 使用 css 自带的滚动相关的属性,实现左右滚动的时候回弹,平稳滚动的效果

  2. js 模拟手动滚动的效果

  3. 代码实现 ele.scrollLeft = scrollLeft; // 核心代码

有哪些优点

  1. 全部原生 js 实现,简单轻量,没有框架限制

  2. 图片有懒加载 => 浏览器IMG图片原生懒加载loading=”lazy”实践指南

  3. 有图片失败的异常处理 => 图片加载失败后CSS样式处理最佳实践

  4. 不支持 scroll-behavior 有兼容处理

  5. 可以 npm 安装使用

用哪些 css 属性实现

scroll-behavior: 让页面平滑的滚动,滚动效果又湿又滑,用户体验会很不错

scroll-snap-type: 滚动到了一个临界点,是回到最初的原点还是滚到终点

scroll-snap-align: 上面那个属性的临界点是在具体的哪一个点?

caniuse:可以查看这些属性的兼容性

如果有某一个属性不兼容怎么办?自己 js 打补丁呗 比如组件里面实现的:scroll-behavior

讲真这些 css 属性我还是首次知道并使用,真香,脱离网上的哪些定位实现方式,用了 css,整体代码清晰易懂

遇到哪些问题

除了最后一张图片,每一张图片到右边有个 padding 的值,这个是避免两张相邻的图片挨在一起。在计算滚动距离的时候要考虑这个情况左右两边的距离,否则就会出现滚动卡住的情况

npm 发包的时候遇到了包引用的问题,询问之后才知道:一般自己写前端代码的时候都是 es module 的,然后打包成 CMD 发布到 npm 上。npm 全称是 node_modules 是给 node.js 使用的,所以要遵守 node 的规范。最好的导出方式就是使用 module.exports = xxx

实现之后

简单的事情也可以变得很有意义,功能虽然简单,但是里面涉及很多很基础的概念。对于准备从学前端的同学而言这是一个很好的选择。既可以学着怎么涉及一个组件,学一下基础知识,又能顺便学一下 npm

简单的事做到了极致会变得特别有意义了。css 一行代码就能极大效率的解决很多 js 的问题,那为啥不试试用 css 解决呢

源码就 120 行,可以看看,是不是还有别的隐形的功能,后面加一个 autoplay 参数就是我临时突然想到了。在之前的工作有碰到这个点击元素平稳滚动的需求。可以下载源码看看,试一试