js刻度尺插件_自制刻度尺插件-前端简易实现腾讯信用界面

news/2024/7/1 21:11:08

依据我现有的知识,在前端上"简易"的实现了腾讯信用的界面,同时自己自制了一个竖直的刻度尺插件,曲线的位置可以根据传入的数值动态的改变,这次主要也想总结一下关于jQuery中extend的方法,也是我们在写插件的时候常用的方法

效果图

jQuery中的extend方法

这里我参考了

文档中给的解释是:jQuery.extend()函数主要是用于将一个或多个对象的内容合并到目标对象上,该函数可以将一个或多个对象的成员属性和方法复制到指定的对象上。

extend也是在我们写插件时常用的方法,

1、扩展方法的原型

$.extend(param,dparam...),它的含义是将dparam合并到param中,

需要注意如果多个对象具有该属性,则后者会覆盖前者的属性值,

也就是说var result = $.extend({},{name : 'JSoso',age:17},{name:"okaychen",sex:"boy"})

最后 result = {name:"okaychen",age:17,sex:"boy"}

2、只有一个参数的情况

只有一个参数时会将改方法合并到jQuery的全局对象中

比如:

$.extend(

{hello:function(){console.log('hello extend')}}

)

最终会将hello方法添加到jQuery全局对象中去。

3、带布尔值的情况

jQuery中的extend还有一种重载原型

语法:$.extend(boolean,dest,src1,src2...)

第一个布尔值参数表示是否使用深度拷贝,默认为false(可以明确指定为true,但是不能明确指明为false)

那么什么是深度拷贝呢?其实不难理解,深度拷贝就是该"属性对象"的"属性"也会被拷贝的目标对象中

var result = $.extend(true, {}

{name:'JSoso',abstract: {age:17,country:'USA'}},

{last:"Amor",abstract: {state:'student',country:'China'}}

);

那么合并后的结果就是:

result ={

name:'JSoso',

last:'Amor',

abstract:{age:17,state:'student',country:'China'}

}

那么如果参数是false,结果会是神马呢?

result ={

name :"JSoso",

last :"Amor",

abstract:{state:"student",country:"China"}

}

会看到第一个abstract内的属性并没有被拷贝,因为没有执行深度拷贝,所以abstract会被后一个覆盖掉了。

关于extend拷贝的方法我总结了上面三点,其实还有好多学问,需要我们去发掘。

流程分析

我看目前网上几乎都是水平的可滑动的刻度尺插件,几乎没有竖直的插件,其实也大同小异。因为做这个东西的需要,所以我需要做一个竖直的刻度尺(而且我本人也不喜欢用插件,我想有一天实现我的插件梦)。

我做这个插件的第一步是先用HTML+ CSS静态的写出大致的效果(这样的同时我觉得我也直观的构思了这个东西的大致架构),比如先0~10做出来,然后计算好间距,然后在后面做文章。

当我们清晰了这个刻度尺的架构之后,需要做的就是用`append`的方法(这里我用的jQuery)插入到指定的位置就可以了(因为这个时候你的刻度尺css代码基本已经完成)。

然后我们需要处理中间标志(即曲线的初始位置)

var firstRand = true;if(firstRand) {

pTop= $(".rulerPointer").position().bottom;

}var rulerLNo = 0;for (var z = 0; z < setLen; z++) {if (z * setHeight >pTop) {

limitTop= pTop - z *setHeight;

rulerLNo=z;break;

}

}

改变曲线的位置

if (param.value && param.value >= param.minUnit && param.value <=param.max) {

$(" .rulerPointer").css("bottom", (param.value / param.minUnit) * 10 *param.mult)

}else{

$(" .rulerPointer").css("bottom", '0');

}

然后我们用each遍历的方法给刻度尺标上刻度值(这里idx就是索引值,ele表示获取遍历的每一个dom对象)

$("#" + param.wrapperId + " .sizeNo").each(function(idx, ele) {if (idx >= rulerLNo && idx

$(ele).html((idx- rulerLNo) * param.minUnit *param.unitSet);

}

})

到这里我们的刻度尺的代码已经完成(只展示了部分代码)

初始化

当我们完成插件的封装,我们只需要创建一个实例化的对象就可以了。

var measureRuler = newMeasureRuler({

wrapperId:"rulerWrapper",      //刻度尺容器的ID

max:110, //最大刻度

minUnit:1, //最小刻度

unitset:10, //刻度尺单元长度

value:60, //初始化值,曲线的初始位置

mult:1 //刻度尺倍数,默认为10px

})

寄语

希望我将来有一天能够实现我的插件梦


http://www.niftyadmin.cn/n/3156057.html

相关文章

【多校连萌2】A 简单的背包问题【补题】

1279: 简单的背包问题 时间限制: 1 秒 内存限制: 32 MB提交: 363 解决: 21提交 状态 题目描述 相信大家都学过背包问题了吧&#xff0c;那么现在我就考大家一个问题。有n个物品&#xff0c;每个物品有它的重量w&#xff0c;价值v&#xff0c;现在有一个容量为W的背包&#xf…

一文读懂git

在日常工作中&#xff0c;经常会用到Git操作。但是对于新人来讲&#xff0c;刚上来对Git很陌生&#xff0c;操作起来也很懵逼。本篇文章主要针对刚开始接触Git的新人&#xff0c;理解Git的基本原理&#xff0c;掌握常用的一些命令。 一、Git工作流程 以上包括一些简单而常用的命…

第三章 Selenide测试框架

前面讲到的都是一些基础理论知识&#xff0c;本章主要学习目前最常用的Web UI自动化工具Selenium工具&#xff0c;其实Selenium WebDriver很多人并不陌生&#xff0c;因为大多数公司现在使用的Web UI测试工具就是Selenium WebDriver.后面主要围绕测试工具Selenide进行实践学习,…

音乐随想——斯美塔那—G小调钢琴协奏曲

乐源 Music -> Piano Trio -> Smetana:Piano Trioin G minor Op.15 总结 每一乐章都会有一段美到极致的主旋律。 第一乐章 起头即有凄凉意味&#xff0c;秋风萧瑟&#xff0c;黄叶满地。大提琴主雄&#xff0c;小提琴主雌&#xff0c;钢琴主流水。 第二乐章 第三乐章 忽而…

如何利用http缓存机制

Web 缓存大致可以分为&#xff1a;数据库缓存、服务器端缓存&#xff08;代理服务器缓存、CDN 缓存&#xff09;、浏览器缓存。 浏览器缓存也包含很多内容&#xff1a;HTTP 缓存、indexDB、cookie、localstorage 等等。这里我们只讨论 HTTP 缓存相关内容。 在具体了解 HTTP 缓…

Zsh 开发指南(第三篇 字符串处理之转义字符和格式化输出)

导读 上一篇讲了 zsh 的常用字符串操作&#xff0c;这篇开始讲更为琐碎的转义字符和格式化输出相关内容。包括转义字符、引号、print、printf 的使用等等。其中很多内容没有必要记忆&#xff0c;作为手册参考即可。 转义字符 转义字符是很多编程语言中都有的概念&#xff0c;它…

UML 类图画法简介

制图使用工具&#xff0c;免费在线作图&#xff0c;实时协作&#xff0c;ProcessOn 支持流程图、思维导图、原型图、UML、网络拓扑图等&#xff0c;力荐&#xff01; 转载于:https://www.cnblogs.com/wxw310415/p/7445522.html

python定义二进制变量_Python学习笔记一:第一个Python程序,变量,字符编码与二进制,用户交互程序...

第一个python程序Windows&#xff1a;设置环境变量&#xff0c;X:\pthonxxx&#xff0c;xxx是版本号在命令提示符下输入python&#xff0c;进入解释器>>>print(“Hello World!”)>>>exit()编辑文件helloworld.py执行&#xff1a;python helloworld.pyLinux&a…