Dom循环点击处理插件

Web交互中,有种很常见的情况就是,当某个dom被第一次点击时,执行某种操作,第二次被点击时,执行另一种操作……第N次被点击时,执行第N种操作,当N+1时,有开始执行第一种操作,如此往复循环……

就这么一个dom的重复点击事件我也能无聊到做个插件出来,当真脑残,但既然做出来了,那就再次记录下,记录自己的脑残人生!

PS:此插件基于JQuery,以下是相关代码,其中参数methodName可以不传,此时表示对dom进行click事件绑定,如果传入非空字符串,则表示要执行相应的方法,暂时该插件只提供了一个执行第几个动作的方法

<span style="white-space:pre">	</span>$.fn.domClickRange = function (arg, methodName) {
            /// <summary>用于处理循环的点击动作</summary>
            /// <param name="arg">请求参数.clickEvent传递的参数clickDom对应当前被点击的dom对象;clickNumber对应当前的点击动作为设定的GroupRange中的第几个点击动作,从0开始计算</param>
            /// <param name="methodName">要执行的方法</param>
            if (typeof methodName === "string" && $.trim(methodName) != "") {
                switch (methodName) {
                    case "clickImmediately"://立刻执行第几个点击动作,可用于批量执行dom操作
                        var clickNumber = ~~arg;
                        $(this).each(function () {
                            var arg = $(this).data('domClickRangeArg');
                            if (arg != null && typeof arg.clickEvent === "function") {
                                var clickItem = getClickItem(this, arg);
                                clickItem.data("clickNumber", clickNumber - 1 >= 0 ? clickNumber - 1 : arg.clickGroupRange - 1);
                                clickItem.click();
                            }
                        });
                        break;
                }
            }
            else {//执行初始化
                var setting = {
                    clickSelector: null,//要绑定点击动作的selector,如果传入null或者空字符串表示要绑定点击事件的为当前dom
                    clickDefaultNumer: 0,//默认为第几次点击动作
                    clickGroupRange: 2,//设定多少次点击动作为一组点击动作,即点击多少次为一轮
                    clickEvent: function (clickDom, clickNumber) { } //dom被点击时要触发的函数
                };
                arg = $.extend({}, setting, arg);
                arg.clickDefaultNumer = ~~arg.clickDefaultNumer;//取整
                arg.clickGroupRange = ~~arg.clickGroupRange;//取整
                $(this).data('domClickRangeArg', arg);
                $(this).each(function () {
                    var clickItem = getClickItem(this, arg);
                    clickItem.data("clickNumber", arg.clickDefaultNumer);
                    clickItem.click(function () {
                        var prevClickNumber = ~~$(this).data("clickNumber");//之前的点击标志
                        var nowClickNumber = ~~((prevClickNumber + 1) % arg.clickGroupRange);
                        $(this).data("clickNumber", nowClickNumber);
                        if (typeof arg.clickEvent === "function") {
                            arg.clickEvent(this, nowClickNumber);
                        }
                        return false;
                    });
                });
            }
            function getClickItem(dom, arg) {
                var clickItem = $(dom);
                if (typeof arg.clickSelector === "string" && $.trim(arg.clickSelector) != "") {
                    clickItem = $(dom).find(arg.clickSelector);
                }
                return clickItem;
            }
        };

以下是测试用的demo

html部分如下,bt_Button为要绑定点击事件的按钮,sp_Number用于显示当前是第几次点击,bt_Immediately用于执行clickImmediately方法,ipt_Number用于传入要离可以执行的点击顺序编号

    <div>
        <input type="button" id="bt_Button" value="Click" /> nowClickNumber:<span id="sp_Number"></span>
    </div>
    <div><input type="button" id="bt_Immediately" value="ClickImmediately" /><input type="text" id="ipt_Number" value="12" /></div>

用于测试的js代码如下

<span style="white-space:pre">	</span>$().ready(function () {
            $('#bt_Button').domClickRange({
                clickDefaultNumer: 9,
                clickGroupRange: 15,
                clickEvent: function (clickDom, clickNumber) {
                    console.info($(clickDom).attr('id') + clickNumber);
                    $('#sp_Number').html(clickNumber);
                }
            });
            $('#bt_Immediately').click(function () {
                $('#bt_Button').domClickRange($('#ipt_Number').val(), 'clickImmediately');
            });
        });

最后来张脑残截图

时间: 2024-10-12 11:07:40

Dom循环点击处理插件的相关文章

js,css随笔(动态生成的dom做点击事件无效)

1.动态生成的DOM做点击事件无效   https://blog.csdn.net/mm_hello11/article/details/79010679 2.消除button的默认样式 margin: 0; padding: 0; border: 1px solid transparent; //自定义边框 outline: none; //消除默认点击蓝色边框效果 3. 键盘按下事件 $("#btn").keydown(function(event){ if(event.keyCo

webdriver处理循环点击

未经作者允许,禁止转载!python selenium webdriver处理循环点击 循环点击主要是针对一些同类的选择按钮,或者下拉选项,或者是选择页码~~~~~~ 如下面两张图片显示的将年份进行循环选择,和将鼠标悬浮循环选择 下面是用python写的 selenium webdriver处理循环点击代码,相关的java代码随后在发表 from selenium import webdriver import time from selenium.webdriver.common.action

selenium循环点击文本框

1.可以用xpath循环点击checkbox List<WebElement> list = dr.findElements(By.className("datagrid-row")); int size = list.size(); if(size>0){ for(int i=0;i<size;i++) { int j = i+1; String index = "/html/body/div[2]/div/div[2]/div[2]/div[2]/

Waves:类Material Design 的圆形波浪(涟漪)点击特效插件

Google Material Design 相信你也了解不少了,但目前无论是应用端还是网页端,可参考案例尚少.本着补充<Material Design 一些相关中文资料/资源收集汇总>一文的目的,介绍一款类Google Material Design 的圆形波浪(涟漪)点击特效插件Waves. Google Material Design 中有一个特效,点击某个色块区域会有圆形波浪(涟漪)渐现放大的效果(当然,对应应用端则为触摸事件).Waves 就是这么一款在网页上实现该特效的javasc

selenium-webdriver循环点击百度搜索结果以及获取新页面的handler

webdriver还是很有意思的,之前用过Ruby的watir的自动化测试框架,感觉selenium的这套框架更好一些,很容易就可以上手.我虽然不做自动化这块,不过先玩玩再说,多学点东西总之还是好一些的. 1 # coding:utf-8 2 import time 3 from selenium import webdriver 4 import unittest 5 from pythontest.commlib.baselib import * 6 7 8 #引用封装后的日志系统 9 lo

自己动手写工具:自动点击小插件

一. 模拟点击操作应用场景 当我们需要对一个网页上的某个按钮进行多次点击以求得某种“好处”的时候,例如天猫的抢红包活动,我们可能需要点击N次之后才有可能获得一个红包,但是这个N是一个未知数,有可能我们要不停地点击半个小时甚至一个小时都还无法获得,自己估计也会点鼠标点得醉了.因此,针对这种情况,我们希望自己写一个小工具来让计算机帮我们做这件事. 既然是让计算机模拟我们的点击操作,其思路自然是找到指定的按钮或图片,循环对其执行click事件.于是,我们开始对其做一个最简单的实现来看看其基本思路.首先

纯js实用DOM元素放大缩小特效插件

Zoomerang.js是一款非常实用的HTML DOM元素放大缩小js特效插件.它可以将页面上的任何元素进行放大缩小.当某个元素处于Zoomerang的监听状态时,点击该元素可以将它放大到屏幕的中间,再次点击它又会回到原来的位置. 使用注意事项: 该元素放大缩小效果依赖于CSS Transform(IE浏览器至少要IE10才能支持) 在固定尺寸的元素上效果最佳:display: block.display: inline-block和img. 避免在很长的文本段上使用. 在mobile上使用时

jQuery支持移动Mobile的DOM元素移动和缩放插件

jQuery Panzoom是一款很有用的HTML DOM元素平移和缩放jQuery和CSS3插件. Panzoom利用CSS transforms 和 matrix函数来为浏览器进行硬件(GPU)加速.它能够支持不论什么元素的平移和缩放:图片.视频.iframe.canvas或文本等等. Panzoom支持移动Mobile的触摸姿势,也支持使用手指来缩放元素大小.它全然能够同一时候在桌面设备和移动手机上同一时候使用.它能够支持iOS 和Android设备,同一时候支持Pointer(IE11+

当下最流行的点击效果插件 waves.js

我第一次看到这个效果是 Google Design 也就是谷歌的设计团队博客用到了这个效果 , 当时的第一感觉就是 擦 ,google就是牛逼, 一个按钮点击也要酷到不要不要的了 第二次看到这个效果是一个 国外的优秀后台模板上面 ,这次我不会在放过了 , 使劲的扒源代码 ,最终让我发现了一个隐藏很深的一款插件 waves.js,口说无凭,我整理了个demo可以在线看效果 http://developer.qietu.com/docs/waves.js/ 附下载地址http://www.qietu