【写一个自己的js库】 5.添加修改样式的方法
1.根据id或class或tag修改样式,样式名是-连接格式的。
function setStyleById(elem, styles){
if(!(elem = $(elem)) return false;
for(prop in styles){
if(!styles.hasOwnProperty(prop)) continue;
if(elem.style.setProperty){
elem.style.setProperty(prop, styles[prop]);
}else{
elem.style[camelize(prop)] = styles[prop];
}
}
return true;
}
Lily['setStyleById'] = setStyleById;
function setStyleByClass(parent, tag, className, styles){
var elements = getElementsByClassName(className, tag, parent);
for(var i = 0; i < elements.length; i++){
setStyleById(elements[i], styles);
}
return true;
}
Lily['setStyleByClass'] = setStyleByClass;
function setStyleByTag(tag, styles, parent){
parent = $(parent) || document;
var elements = parent.getElementsByTagName(tag);
for(var i = 0; i < elements.length; i++){
setStyleById(elements[i], styles);
}
return true;
}
Lily['setStyleByTag'] = setStyleByTag;
2.获取class数组
function getClassNames(elem){
if(!(elem = $(elem))) return false;
return elem.className.split(/\s+/);
}
Lily['getClassNames'] = getClassNames;
3.判断是否有class
function hasClassName(elem, className){
if(!(elem = $(elem))) return false;
var classNames = getClassNames(elem);
for (var i = 0; i < classNames.length; i++) {
if(classNames[i] === className) return true;
}
return false;
}
Lily['hasClassName'] = hasClassName;
4.添加一个class
function addClass(elem, className){
if(!(elem = $(elem))) return false;
elem.className += (elem.className? ' ' : '') + className;
return true;
}
Lily['addClass'] = addClass;
5.删除一个class
function removeClassName(elem, className){
if(!(elem = $(elem))) return false;
var classNames = getClassNames(elem);
var length = classNames.length;
for (var i = length - 1; i >= 0; i--) {
if(classNames[i] === className) delete classNames[i];
};
elem.className = classNames.join(' ');
return (length == classNames.length) ? false : true;
}
Lily['removeClassName'] = removeClassName;
6.取得一个元素的计算样式
function getComputedStyle(elem, property){
if(!(elem = $(elem)) || !property) return false;
var value = elem.style[camelize(property)];
if(!value){
if(document.defaultView && document.defaultView.getComputedStyle){
var css = document.defaultView.getComputedStyle(elem, null);
value = css ? css.getPropertyValue(property) : null;
}else if(elem.currentStyle){
value = elem.currentStyle[camelize(property)];
}
}
return value == "auto" ? '' : value;
}
Lily['getComputedStyle'] = getComputedStyle;
7.渐变动画
function fadeColor(from, to, callback, duration, framesPerSecond){
function doTimeout(color, frame){
setTimeout(function (){
callback(color);
}, (duration * 1000 / framesPerSecond) * frame);
}
duration = duration || 1;
framesPerSecond = framesPerSecond || 15 * duration;
var frame = 1;
var r, g, b;
doTimeout('rgb(' + from.r + ',' + from.g + ',' + from.b + ')', 0);
while(frame < framesPerSecond + 1){
r = Math.ceil(from.r * (framesPerSecond - frame)/framesPerSecond + to.r * frame/framesPerSecond);
g = Math.ceil(from.g * (framesPerSecond - frame)/framesPerSecond + to.g * frame/framesPerSecond);
b = Math.ceil(from.b * (framesPerSecond - frame)/framesPerSecond + to.b * frame/framesPerSecond);
doTimeout('rgb(' + r + ',' + g + ',' + b + ')', frame++);
}
}
例子
Lily.addEvent(window, "load", function (){
fadeColor({'r': 255, 'g': 255, 'b': 255}, {'r': 0, 'g': 0, 'b': 0}, function (color){
document.body.style.backgroundColor = color;
}, 10, 50);
});
【写一个自己的js库】 5.添加修改样式的方法的更多相关文章
- 总结:js中4类修改样式的方法
前言 最近在写一个扩展右键菜单的插件,既然是插件,想着一步到位,把相关的style样式设置都丢进js文件中,直接加载一个js文件便可以使用该插件,所以今天就研究了下js批量的插入样式的方法,即addS ...
- 【写一个自己的js库】 3.添加几个处理字符串的方法
1.生成重复的字符串 if(!String.repeat){ String.prototype.repeat = function (count){ return new Array(count + ...
- 【写一个自己的js库】 2.实现自己的调试日志
还是本着学习的目的,实现一个自己的调试日志,界面很简单,就是将调试信息显示在页面的正中央,用一个ul包裹,每条信息就是一个li. 1.新建一个myLogger.js文件,将需要的方法声明一下.其中va ...
- 【写一个自己的js库】 1.搭个架子先
最近在看<javascript dom 高级程序设计>,想着跟着里面的代码敲一遍吧,也算是做一下学习笔记吧,所以这不是重新发明轮子,只是个学习的过程. 1.先确定自己的命名空间,并且加入几 ...
- 【写一个自己的js库】 4.完善跨浏览器事件操作
1.阻止冒泡. function stopPropagation(event){ event = event || getEvent(event); if(event.stopPropagation) ...
- 仿照jquery封装一个自己的js库(一)
所谓造轮子的好处就是复习知识点,加深对原版jquery的理解. 本文系笔者学习jquery的笔记,记述一个名为"dQuery"的初级版和缩水版jquery库的实现.主要涉及知识点包 ...
- 仿照jquery封装一个自己的js库
所谓造轮子的好处就是复习知识点,加深对原版jquery的理解.本文系笔者学习jquery的笔记,记述一个名为"dQuery"的初级版和缩水版jquery库的实现.主要涉及知识点包括 ...
- Java基础-接口.编写2个接口:InterfaceA和InterfaceB;在接口InterfaceA中有个方法void printCapitalLetter();在接口InterfaceB中有个方法void printLowercaseLetter();然 后写一个类Print实现接口InterfaceA和InterfaceB,要求 方法 实现输出大写英文字母表的功能,printLowerca
#34.编写2个接口:InterfaceA和InterfaceB:在接口InterfaceA中有个方法void printCapitalLetter():在接口InterfaceB中有个方法void ...
- MySql表、字段、库的字符集修改及查看方法
这篇文章主要介绍了MySql表.字段.库的字符集修改及查看方法,本文分别给们它的修改及查看语句,需要的朋友可以参考下 修改数据库字符集: 代码如下: ALTER DATABASE db_name DE ...
随机推荐
- information_schema.collations 学习
information_schema.collations 表中的每一行对应一个排序规则 1.information_schema.collations 表中学用列: 1.id :排序规则的ID 2. ...
- Oracle的几种索引
Oracle 提供了多种不同类型的索引以供使用.简单地说, Oracle 中包括如下索引: 1. B* 树索引 这些是我所说的 “ 传统 “ 索引.到目前为止,这是 Oracle 和大多数其他数据库中 ...
- Keil C51 Data Overlaying
一般的编译器将函数中的区域变数动态配置在stack,等函数结束空间就释放出来.因为8051 的内部记忆体很少,只有区区128 或256 bytes,而且stack 也是共用这块记忆体.为了节省stac ...
- QT 4.87 changes
http://blog.qt.io/blog/2015/05/26/qt-4-8-7-released/ Qt 4.8.7 is a bug-fix release. It maintains bot ...
- arcgis api for silverlight使用google map等多个在线地图
原文 http://blog.csdn.net/leesmn/article/details/6820245 无可否认,google map实在是很漂亮.可惜对于使用arcgis api for si ...
- ##解决 ViewPager 调用 notifyDataSetChanged()无刷新:原理、解决办法##
一.原理 转自:http://www.cnblogs.com/maoyu417/p/3740209.html 转载 http://www.67tgb.com/?p=624 最近项目结束,搞了一次代码分 ...
- 关于memcpy和memmove的一点说明
今天看到书上降到memcpy和memmove的区别才突然发现原来两者之间有如此区别,以前只知道这两个函数是 实现同样的功能,没有接触到其不同. memcpy和memmove在MSDN的定义如下: 从两 ...
- java多线程 并发 编程
转自:http://www.cnblogs.com/luxiaoxun/p/3870265.html 一.多线程的优缺点 多线程的优点: 1)资源利用率更好 2)程序设计在某些情况下更简单 3)程序响 ...
- 根据一个旅游网站的psd素材还原的静态页面
自学web前端的html.css和jquery两个月,想检验下自己的学习成果,遂从网上下了个关于旅游网站的psd素材,自己照着素材还原网站的静态页面. 这是我制作好的静态页面的压缩文件:旅游网站首页. ...
- MVC思想架构的简单自定义UITableViewCell
在iOS的开发过程中,架构思想是很重要的一部分,目前的主流应该分为MVC与MVVM两种,在这里不做过多的区分,有兴趣的同学可以看看唐巧大神的一篇文章<被误解的MVC和被神化的MVVM& ...