dynamic-css 动态 CSS 库,使得你可以借助 MVVM 模式动态生成和更新 css,从 js 事件和 css 选择器的苦海中脱离出来

dynamic-css 动态 CSS 库,使得你可以借助 MVVM 模式动态生成和更新 css,从 js 事件和 css 选择器的苦海中脱离出来

dynamic-css 使得你可以借助 MVVM 模式动态生成和更新 css,从而将本插件到来之前,打散、嵌套在 js 中的修改样式的代码剥离出来。比如你要做元素跟随鼠标移动,或者根据滚动条位置的变化而触发一些效果,原本你要写 js 去绑定滚动事件,然后计算偏移量,然后更新元素 css,使用 dynamic-css,你只要根据语法去写好 css 表达式就可以了。对于一些原本需要复杂的 js 判断的动态 css,用 dynamic css 表达式几行代码搞定。

 

举两个例子:

元素跟随鼠标移动

<span>dynamic-css 动态 CSS 库,使得你可以借助 MVVM 模式动态生成和更新 css,从 js 事件和 css 选择器的苦海中脱离出来</span>

实现它的源代码:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>元素跟随鼠标移动 - DynamicCss Demo</title>
    <meta http-equiv="X-UA-Compatible" content="IE=11,chrome=1" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <script src="jquery.js"></script>
    <script src="avalon.shim.js"></script>
    <script src="avalon.dynamiccss.js"></script>
    <script src="layout.js"></script>
</head>
<body>
    <style type="text/dynamiccss" ms-controller="layout" ms-dynamiccss>
/* 这里的 CSS 不是静态的,其值会随绑定变量的更新而更新,从而实现一个动态的 style */
.mouse-follow { position: absolute;
/* layout.mouse.pageY 和 layout.mouse.pageX 是预先设定好的对象,其值会随鼠标的移动而更新,值更新时 CSS 随之对应更新。你也可以自定义绑定的对象 */
top:{{layout.mouse.pageY}}px; left:{{layout.mouse.pageX}}px; } </style>
<div class="mouse-follow">为什么追我</div> </body> </html>

页面滚动到一定距离时,元素发生变化

<span>dynamic-css 动态 CSS 库,使得你可以借助 MVVM 模式动态生成和更新 css,从 js 事件和 css 选择器的苦海中脱离出来</span>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>页面滚动到一定距离时,元素发生变 - DynamicCss Demo化</title>
    <meta http-equiv="X-UA-Compatible" content="IE=11,chrome=1" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="jquery.js"></script>
    <script src="avalon.shim.js"></script>
    <script src="avalon.dynamiccss.js"></script>
    <script src="layout.js"></script>
</head>
<body>
    <style>
        html { width: 640px;margin:0 auto; }
        .content-sum {
            display: none;
            position: fixed;
            width:640px;
            top: 0;
            background: #808080;
            height:50px;
            line-height:50px;
            text-align:center;
        }
       .content-full{
            height:9000px;
        }
    </style>
    <style type="text/dynamiccss" ms-controller="layout" ms-dynamiccss> .content-sum { display:{{layout.doc.scrollTop > 135 ? "block" : "none"}}; /* 这里面可以写 js 代码,可以调用 js 方法,基本无限制 */ } </style>

    <b>往下滚动试试</b>

    <div class="big-box">
        <div class="content-sum">经过不懈的努力取得的结果和别人通过关系取得的结果一样甚至更差,那努力还有什么..</div>
        <h1 class="title">经过不懈的努力取得的结果和别人通过关系取得的结果一样甚至更差,那努力还有什么意义呢?</h1>
        <div class="content-full">
            考研过,失败过,后来也成功过。<br /><br />
            去考研论坛围观过连续7战的奇葩,围观过为了考研抛弃女友、抛弃人际关系奋力一战的汉子,围观过被考研折磨的精神失常的病人,也认识大学玩四年,考研复习两个月既考上985(理工科考研,非文科)院校天赋灵异的奇才
            .....
        </div>

    </div>
</body>
</html>

 

如果是用 js 来实现这些效果的话,就会充斥着各种事件,各种变量的加加减减,和 css 选择器更新,代码挺丑的,而且和 dom 类似,情况复杂之后 js 事件相互触发稍有不慎就会坠入苦海。

dynamic-css 是基于 avalon js 的一个扩展,只要是 avalon js 支持的语法,dynamic-css 都能够支持,甚至可以在 css 表达式里面调用 js function。

dynamic-css 使你从此脱离事件和选择器的苦海,来到数据和绑定的乐园!欢迎使用和交流!

本文示例 Source Code:

https://github.com/darklx/dynamic-css

dynamic-css 使用了 jQuery,但并不是必须依赖 jQuery ,只是用了 jQuery 的 $.get 方法,如果你的项目不想引入 jQuery,也是可以的,传给 dynamic-css 具有相同 get 方法功能的对象即可。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119606.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • journalctl用法详解

    journalctl用法详解文章目录一、journalctl命令简述二、journalctl常用选项一、journalctl命令简述journalctl[OPTIONS…][MATCHES…]Querythejournal.Flags:–systemShowthesystemjournal–userShowtheuserjournalforthecurrentuser-M–machine=CO

    2022年5月24日
    82
  • mysql的longtext

    mysql的longtextvarchar为变长字节,所占空间为字符串实际长度加1,最长为65535个字节而longtext也是变长字符存储,只保存字符数据,最长为4294967295字节,比较适合存储大内容…

    2022年5月14日
    78
  • 网路层协议——IGMP协议「建议收藏」

    网路层协议——IGMP协议「建议收藏」一、组播地址1、IP多播的基本概念①IP多播(以前曾译为组播)已成为互联网的一个热门课题。目的:更好地支持一对多通信,网络中的带宽压力。●一对多通信:一个源点发送到许多个终点。例如,实时信息的交付(如新闻、股市行情等),软件更新,交互式会议及其他多媒体通信。2、组播IP地址的特点①它使用D类IP地址作为目的地址。②组播数据包不产生ICMP差错报文。③组播地址只能用于目的地址而不能用于源地址。3、组播MAC地址…

    2022年9月14日
    0
  • idea怎么取消多行注释_idea注释快捷键哪里修改

    idea怎么取消多行注释_idea注释快捷键哪里修改1、一次性添加多行注释的快捷键首先选中要注释区域,然后ctrl+/    这个是多行代码分行注释,每行一个注释符号ctrl+shift+/  这个是多行代码注释在一个块里,只在开头和结尾有注释符号2、取消多行注释快捷键怎样添加快捷键的,用相同方法取消,如ctrl+/ 添加注释,则ctrl+/取消注释ctrl+shift+/添加注释,则ctr

    2022年8月15日
    3
  • 用html设计一个网站_html个人网页中文模板

    用html设计一个网站_html个人网页中文模板多的不说,直接上网页我个人自学的,样子不是恒好看,但是可以作为作业(老师也没怎么讲,毕竟是在大学里面嘛,大部分时间都是自学罢了)这是主页面index.html<htmllang=”en”><head><metacharset=”UTF-8″><metaname=”viewport”content=”width=device-width,initial-scale=1.0″><title>

    2022年10月13日
    0
  • uart 时序_8080接口时序

    uart 时序_8080接口时序数据传送速率用波特率来表示,指单位时间内载波参数变化的次数,或每秒钟传送的二进制位数  如每秒钟传送240个字符,而每个字符包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为2400Bd  传输时序如下图    在UART中,信号线上共有两种状态,分别用逻辑1(高电平)和逻辑0(低电平)来区分  在空闲时,数据线应该保持在逻辑高电平状态  其中…

    2022年9月14日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号