使用AlloyFinger(移动端点触插件)

使用AlloyFinger 的手势缩放,外部按钮操控缩放, 3D改为2D减少放大模糊 项目中需要手势放大图片,懒得自己写组件库~找了好久,决定用AlloyFinger,但是呐~光用AlloyFinger不满足要求,只能中心放大,后续加入了AlloyCrop来达到可以按照手势点击位置放大,最后发现有“微信”浏览器等有部分不兼容matrix3d的,会变模糊。最后改动transform.js变成matrix的2d缩放。1.AlloyFinger的使用【中心放大图片,太粗糙,达不到PD小姐... 阅读详情

插件gitHub地址https://github.com/AlloyTeam/AlloyFinger
直接贴代码。这里主要是用pressMove 和 pinch 功能。

var initScale = 1;
const mapEl = document.getElementById("map-element");
const imgEl = document.getElementById("hit");
const _timeout = 500;

Transform(mapEl);
Transform(imgEl);
new AlloyFinger(mapEl, {
    pinch: function(evt) {
        mapEl.scaleX = mapEl.scaleY = initScale * evt.zoom;
        imgEl.scaleX = imgEl.scaleY = initScale * evt.zoom;
    },
    pressMove: function(evt) {
        mapEl.translateX += evt.deltaX;
        mapEl.translateY += evt.deltaY;

        imgEl.translateX += evt.deltaX;
        imgEl.translateY += evt.deltaY;

        evt.preventDefault();
    },
    multipointEnd: function() {
        To.stopAll();
        if (mapEl.scaleX < 1) {

            new To(mapEl, "scaleX", 1, 500, ease);
            new To(mapEl, "scaleY", 1, 500, ease);

            new To(imgEl, "scaleX", 1, 500, ease);
            new To(imgEl, "scaleY", 1, 500, ease);
        }
        if (mapEl.scaleX > 4) {

            new To(mapEl, "scaleX", 4, 500, ease);
            new To(mapEl, "scaleY", 4, 500, ease);

            new To(imgEl, "scaleX", 4, 500, ease);
            new To(imgEl, "scaleY", 4, 500, ease);
        }

        let _minX = -(parseInt(mapEl.style.width) / 2)
        if (mapEl.translateX < _minX) {
            new To(mapEl, "translateX", _minX, _timeout, ease);
            new To(imgEl, "translateX", _minX, _timeout, ease);
        }

        let _maxX = (parseInt(mapEl.style.width) / 2)
        if (mapEl.translateX > _maxX) {
            new To(mapEl, "translateX", _maxX, _timeout, ease);
            new To(imgEl, "translateX", _maxX, _timeout, ease);
        }

         let _minY = -20;
        if (mapEl.translateY < _minY) {
            new To(mapEl, "translateY", _minY, _timeout, ease);
            new To(imgEl, "translateY", _minY, _timeout, ease);
        }

         let _maxY = 50;
        if (mapEl.translateY > _maxY) {
            new To(mapEl, "translateY", _maxY, _timeout, ease);
            new To(imgEl, "translateY", _maxY, _timeout, ease);
        }
        initScale = mapEl.scaleX;
    }
})

function ease(x) {
    return Math.sqrt(1 - Math.pow(x - 1, 2));
}

function moveTo(_storeId) {
    let _point = polygonPoints[_storeId];
    let _scale = 2;

    let _center = getCenter(_point);
    let _x = window.innerWidth - _center.deltaX * _scale;
    let _y = 30;

    highLight(_storeId);

    new To(mapEl, "scaleX", _scale, _timeout, ease);
    new To(mapEl, "scaleY", _scale, _timeout, ease);
    new To(imgEl, "scaleX", _scale, _timeout, ease);
    new To(imgEl, "scaleY", _scale, _timeout, ease);

    new To(mapEl, "translateX", _x, _timeout, ease);
    new To(mapEl, "translateY", _y, _timeout, ease);
    new To(imgEl, "translateX", _x, _timeout, ease);
    new To(imgEl, "translateY", _y, _timeout, ease);
}

function getCenter(_points) {
    let _oddY = 0;
    let _evenX = 0;
    let _result = {
        deltaX: 0,
        deltaY: 0
    };
    for (let i in _points) {
        if (i % 2 == 0) {
            _evenX += _points[i];
        } else {
            _oddY += _points[i];
        }
    }

    let _rate = $("#hit").width() / 1920;

    _result.deltaY = Math.round(_oddY * _rate / (_points.length / 2))
    _result.deltaX = Math.round(_evenX * _rate / (_points.length / 2))

    return _result;
}

主要是实现2个联动所以才会这么多重复的代码。
首先是获得元素,最好使用id,用class的话要加[0](如果是第一个的话);
Transform是动画插件。所有的插件可以来这里下载。https://pan.baidu.com/s/1qXEnk3y
提取密码 7x23。
这里有几点需要提醒大家:
1.有几个需要缩放的容器,就需要Transform多少个。
2.如果需要设置缩放不从1开始,可以在multipointEnd的时候。设置

initScale = mapEl.scaleX;

To是一个动画插件。可以限定拖动的区域。

超轻量级Web手势库AlloyFinger实战应用 AlloyFinger 是一款轻量级、高性能的移动端手势识别库,由腾讯团队开源,专为解决移动Web中复杂触摸交互而生。其核心设计理念是“贴近原生体验、最小化侵入性”,通过封装底层touchstarttouchmovetouchend事件流,提供如tapswipepinchrotate等高级手势抽象。// 示例:初始化AlloyFinger并绑定滑动手势swipe: (e) => console.log("滑动方向:", e.direction)}); 阅读详情

相关推荐

超级小的web手势库AlloyFinger

超级小的web手势库AlloyFinger:https://github.com/cometwo/AlloyFinger

web手势库Alloyfinger

web手势库Alloyfinger

weixin_41897680的博客 1779

LTspice元器件库导入与路径管理:符号、模型、子电路全解析

在电子电路仿真中,元器件库通常由符号、模型和子电路三层构成:符号定义引脚外观,模型描述电气行为,子电路封装多端子网络。理解三者职责边界,是解决 LTspice 元器件库导入报错的关键。许多导入失败并非软件问题,而是文件类型错配、路径引用不清或引脚顺序不一致。掌握 `.include` 指令、用户库搜索路径和自制符号绑定模型,可以提升第三方模型复用效率,降低跨项目迁移成本。该思路适用于运放、MOS 管、二极管等器件建模,尤其在 UA741 等经典运放导入场景中,需要先核对 `.subckt` 引脚顺序,再选择

weixin_29182481的博客 183

web手势库AlloyFinger运用( 控制CANVAS中图片移动、缩放、旋转)

web手势库AlloyFinger(alloy_finger.js),针对多点触控设备编程的Web手势组件,快速帮助你的web程序增加手势支持 非常灵活,省去了自己写相应操作的代码,就能控制元素移动、缩放、旋转了 http://alloyteam.github.io/AlloyFinger/example/canvas/此网址的案例就是控制CANVAS中多张图片操作的,此案例实现不仅引用了al

羽筠的博客 1万+

【ChatGPT实战案例】ChatGPT如何帮助产品经理高效工作?

1. 产品经理主要工作方向, 2. 具体工作中,向ChatGPT提问参考

weixin_62909516的博客 1902

NuPlayer 之 Renderer

触发postDrainAudioQueue_l()或postDrainVideoQueue()开始渲染。解码器输出数据 → NuPlayer::Decoder::onMessageReceived。音频数据存入mAudioQueue,视频数据存入mVideoQueue。• 每次写入后通过mNotifyConsumed通知解码器。• 通过AudioSink::write()写入音频设备。• 根据VSync信号和音频时钟调整渲染时机。• 通过Surface直接提交给显示系统。

aningxiaoxixi的博客 319

【亲测免费】 AlloyFinger - 移动手势库快速入门及实践指南

**AlloyFinger** 是腾讯 AlloyTeam 团队开发的一个轻量级的移动端手势库。它的大小极小,但功能强大,能够处理常见的触摸手势,包括但不限于:pinch(捏合),rotate(旋转),pressMove(按压移动),doubleTap(双击),swipe(滑动),longTap(长按)和tap(点击)。适用于需要在手机和平板上实现复杂交互的Web应用。 ## 2. 项目快速启动...

gitblog_00460的博客 795

SAP 货币类型和公司代码的货币设置

货币类型分为公司代码和集团货币,一般FI 10类型和集团货币 30,事务代码是8KEM; 设置货币类型的事务代码是OB22 在S/4 1809版本里编辑功能统合到事务代码FINSC_LEDGER 中了,这里集中了分类账和公司代码的设置; 设置多账簿的币种(会出现在BSEG和FAGLFLEXA表中) 汇率维护在TCURR表中,可通过BAPI_EXCHANGERATE_GETDETAIL函数获取。 CO货币的事务代码是成本控制范围货币:OKKP ,一般设置为货币码20和30; 另外, SCC4设置集团货币,

RichardYang2020的博客 1万+

移动端 预览图片 手势改变图片大小

引用js库 <script src="asset/transform.js"></script> <script src="alloy_finger.js"></script> <script src="asset/to.js"></script> 预览代码 //点击图片进入预览 var target; ...

qq_38394249的博客 229

基于RK3588与FPGA的SDI视频处理系统:从MIPI CSI-2输入到DSI输出的全链路解析

本文深入解析了基于RK3588与FPGA的SDI视频处理系统全链路。系统利用FPGA作为高速接口转换与流管理核心,将SDI信号转换为MIPI CSI-2数据流送入RK3588进行智能图像处理与AI分析,处理结果再通过MIPI DSI回传,最终由FPGA控制编码为SDI输出,实现了专业视频接口与强大算力的高效协同。

s1t2u3的博客 673

基于CNN-LSTM融合模型的环卫车动态称重算法研究:从频率感知到精准质量估计

摘要: 针对环卫车辆动态称重需求,本研究提出一种基于CNN-LSTM融合网络的频率分析方法。通过在实验室构建振动频率采集系统,获取不同载重下的结构响应数据,经MATLAB进行信号处理和特征提取后,建立频率-质量的非线性映射模型。实验表明,该算法在静态和模拟动态场景下平均绝对误差小于1.5%,显著优于传统方法,为环卫车智能化管理提供了高精度实时称重方案。 关键词: 动态称重;深度学习;频率分析;CNN-LSTM;MATLAB。

AI的内部世界的博客 377

前端常用插件、工具类库汇总

它采用"Logic-less template"(无逻辑模版)的思路,在加载时被预编译,而不是到了客户端执行到代码时再去编译, 这样可以保证模板加载和运行的速度。拥有两个版本,无依赖的独立版和react版本。支持 MP4、M3U8、FLV 等多种媒体格式,同时它也帮我们解决了大部分的兼容性、差异化问题,包括全屏、自动播放、内联播放、直播解码等常见媒体播放需求。图片无损压缩,支持PS软件插件直接压缩,另外提供http、ruby、php、node.js、pyhont、java、.net多种方式API。

qq_37105269的博客 255

R语言机器学习 频谱分析

由傅里叶理论可知,时域中的任何信号都可以由一个或多个具有适当频率、幅度和相位的正弦 波叠加而成。也就是说,任何时域信号都可以变换成相应的频域信号,通过频域测量可以得到信号在某个特定频率.上的能量值。频谱分析就是在频域上分析时间序列的方法,它使用傅里叶分析方法,将时域信号转换到频域,并从频域中找出信号频谱的变化规律。原始周期图不是谱密度的一致估计量,但相邻值是渐近独立的。0点的周期图在理论上是0,因为去掉了级数的均值(但这可能会受到渐减的影响):在平滑过程中,它被相邻值的插值所取代,并且该频率不返回任何值。

Mrrunsen的博客 1176

在线的h5编辑器汇总和分析

流行的三个编辑器有ih5, 木疙瘩, 易派.   木疙瘩 易派 Ih5 服务端语言 Php Phython go 数据库 未找到 Mongo MySQL...

WDYDXF的专栏 4700

【误码率仿真】基于matlab 小波变换OFDM误码率仿真

其中,与传统的 OFDM 相比,小波变换 OFDM 在进行调制和解调时,使用的是小波变换函数。需要注意的是,由于小波变换函数将频域信号转换为时域信号,因此与传统 OFDM 不同,小波变换 OFDM 中的信号需要在时域上添加循环前缀。与传统的 OFDM 不同,小波变换 OFDM 使用小波函数作为基函数,而非正弦函数作为基函数,因此可以在保持子载波正交性的同时,让子载波之间的带宽变得更加均匀。在频域进行信号加权,然后进行小波逆变换,得到时域信号。在接收端进行信号接收,去掉循环前缀并进行小波变换得到频域信号。

Fanjufei的博客 664

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【vue 移动端使用alloyfinger操作图片拖拽缩放】

vue 移动端使用alloyfinger操作图片拖拽缩放

Suger的博客 1168

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

AlloyFinger 项目常见问题解决方案

AlloyFinger 是一个超小型的多触点手势库,专为 Web 开发设计。该项目的主要编程语言是 JavaScript。AlloyFinger 提供了丰富的手势识别功能,包括点击、双击、长按、旋转、捏合、滑动等,适用于移动端和桌面端的 Web 应用开发。 ## 新手使用注意事项及解决方案 ### 1. 安装问题 **问题描述**:新手在安装 AlloyFinger 时可能会遇到依赖包安装失...

gitblog_00183的博客 589

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

web手势库AlloyFinger运用( 控制CANVAS中图片移动、缩放、旋转) - 可编辑图片指定区域位置

对 web手势库AlloyFinger运用( 控制CANVAS中图片移动、缩放、旋转) 的优化修改,上传的可编辑的图片在指定区域中,计算图片信息以最合适的大小及位置显示 // 上传的图片画入指定区域位置设置: // bmp.x = stage.width / 2; // bmp.y = stage.height / 2; // bmp.x = '海报图中显示区域的起始:X' + '海报图中...

羽筠的博客 8万+

mruby 4.0 全面解读:模式匹配、ROM 方法表、GC 优化与 VM 新指令

本文基于 mruby 仓库的 [mruby4.0 变更说明](https://link.gitcode.com/i/f8df4d04dfa54f8b35b4278fe7758f1f),系统梳理 mruby 从 3.4 升级到 4.0 的核心变化。你将掌握 mruby 4.0 新增的 `case/in` 模式匹配语法与各类模式写法、C API 的命名与行为变更、ROM 方法表与 GC 内存优化的底层

gitblog_00062的博客 550

超级小的web手势库AlloyFinger发布

简介 针对多点触控设备编程的Web手势组件,快速帮助你的web程序增加手势支持,也不用再担心click 300ms的延迟了。拥有两个版本,无依赖的独立版和react版本。除了Dom对象,也可监听Canvas内元素的手势(需要Canvas引擎内置对象支持addEventListener绑定touch相关事件)。 据不完全统计,目前AlloyFinger服务于:兴趣部落、QQ群、QQ动漫、腾讯学院、T...

weixin_34342905的博客 205

AlloyFinger手势库:让网页拥有“触感“的魔法棒

你是否曾想过,在手机浏览器里也能体验到像原生App那样流畅自然的手势操作?比如双指缩放图片、滑动切换页面、长按弹出菜单...现在,这一切都能轻松实现!AlloyFinger就是这样一个神奇的手势识别库,它体积小巧却功能强大,让你的网页瞬间拥有"触感"。 ## 为什么选择AlloyFinger? 想象一下,你的网页能"听懂"用户的手势指令,就像魔术师挥动魔法棒一样神奇。AlloyFinger的独

gitblog_00056的博客 967

节点操作和插件---Swiper和AlloyFinger

节点操作和Swiper插件

ioncannontic的博客 411
下一篇: ES6 的一些新函数(不定时更新)
Aaron灬
博客等级 码龄9年 0粉丝 7原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值