整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

前端实用代码屑,为你的工作增加一些效率

前端实用代码屑,为你的工作增加一些效率

的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。

1、使用解构获取json数据

let jsonData={  
id: 1,  
status: "OK",  
data: ['a', 'b']  
};  
let { id, status, data: number }=jsonData;  
console.log(id, status, number ); // 1,“OK”,[a, b]  
`

2、使用扩展字符串合并数组

let a1=[1,2];  
let a2=[3,4];  
console.log([...a1,...a2]) // [1,2,3,4]

3、使用Set实现数组去重

let arr=[1,2,2,3];  
console.log([... new Set(arr)]) // [1,2,3]  

4、使用apply改变this指向

let name="maomin";  
let obj={  
  name:'xqm',  
  say:function(year,place){  
   console.log(this.name+' is '+year+' born from '+place);  
  }  
};  
let say=obj.say;  
setTimeout(function(){  
 say.apply(obj,['1996','China']);  
},0)  

5、使用解构快速交换变量值

let a=10;  
let b=20;  
[a,b]=[b,a];  

6、使用解构实现多变量赋值

let [a,b,c]=[1,2,3];  

7、找到数组中的最大值

 console.log(Math.max(...[14, 3, 77, 30])); //77

8、实现数组内值遍历计算

`const list=[1,2,3,4,5];  
  const newList=list.map(item=>console.log(item*item)) // 1 4 9 16 25

9、模板字符串

let x='我是x';  
let y='我是y';  
console.log(`${x} + ${y}`) // 我是x + 我是y  

10、实现防抖函数

「原理:」 在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。「适用场景:」

  1. 按钮提交场景:防止多次提交按钮,只执行最后提交的一次;
  2. 服务端验证场景:表单验证需要服务端配合,只执行一段连续的输入事件的最后一次;
  3. 搜索联想词场景;

「代码:」

// 防抖  
const debounce=(fn,delay)=>{  
let timer=null;  
return (...args)=>{  
 clearTimeout(timer);  
 timer=setTimeout(()=>{  
 fn.apply(this,args)  
},delay)  
}  
}  

「实例:」

<body>  
    <input type="text" class="int" onkeydown="down()">  
</body>  
<script> function down() {  
        debounce(()=> {  
            console.log('1')  
        }, 2000)()  
    }  
    const debounce=(fn, delay)=> {  
        let timer=null;  
        return (...args)=> {  
            clearTimeout(timer);  
            timer=setTimeout(()=> {  
                fn.apply(this, args)  
            }, delay)  
        }  
    }</script>  

11、实现节流函数

「原理:」 规定在一单位时间内。只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。「适用场景:」

  1. 拖拽场景:固定时间只执行一次,防止超高频次触发位置变动;
  2. 缩放场景:监控浏览器resize;
  3. 动画场景:避免短时间内多次触发动画引起的性能问题。

「代码:」

 // 节流函数  
    const throttle=(fn, delay=500)=> {  
        let flag=true;  
        return (...args)=> {  
            if (!flag) return;  
            flag=false;  
            setTimeout(()=> {  
                fn.apply(this, args)  
            }, delay);  
  
        }  
    }

「实例:」

 // 节流函数  
    const throttle=(fn, delay=500)=> {  
        let flag=true;  
        return (...args)=> {  
            if (!flag) return;  
            flag=false;  
            setTimeout(()=> {  
                fn.apply(this, args)  
            }, delay);  
  
        }  
    }  
    // 浏览器窗口缩放  
    window.onresize=function(){  
        throttle(()=>{  
            console.log(1)  
        })()  
    }

12、解析URL params为对象

// let url=document.location.toString();  
let url='https://www.maomin.club/?user=maomin&nn=1111';  
  
function GetUrlParam(url){  
  let arrObj=url.split("?");  
  let params=Object.create(null)  
  if (arrObj.length > 1){  
    arrObj=arrObj[1].split("&");  
    arrObj.forEach(item=>{  
      item=item.split("=");  
      params[item[0]]=item[1]  
    })  
  }  
  return params;  
}  
  
console.log(GetUrlParam(url)) // {user: "maomin", nn: "1111"}  

13、Vue常用修饰符

修饰符可以同时使用多个,但是可能会因为顺序而有所不同。用v-on:click.prevent.self会阻止所有的点击,而 v-on:click.self.prevent只会阻止对元素自身的点击。也就是从「左往右判断」


(1)、表单修饰符

「1、.lazy」

<div>  
   <input type="text" v-model.lazy="value">  
   <p>{{value}}</p>  
</div>  

只有当我们光标离开输入框的时候,它才会更新视图,相当于在onchange事件触发更新。

「2、.trim」

<input type="text" v-model.trim="value">  

过滤一下一些输入完密码不小心多敲了一下空格的兄弟输入的内容。需要注意的是,它只能过滤首尾的空格!首尾,中间的是不会过滤的。

「3、.number」

<input type="text" v-model.number="value">  

如果你先输入数字,那它就会限制你输入的只能是数字。如果你先输入字符串,那它就相当于没有加.number。

(2)、事件修饰符:

「4、.stop」

<!-- 只打印1 -->  
<div @click="shout(2)">  
  <button @click.stop="shout(1)">ok</button>  
</div>  
  

由于事件冒泡的机制,我们给元素绑定点击事件的时候,也会触发父级的点击事件。一键阻止事件冒泡,简直方便得不行。相当于调用了event.stopPropagation()方法。「5、.prevent」

<!-- 提交事件不再重载页面 -->  
<form v-on:submit.prevent="onSubmit"></form>  

用于阻止事件的默认行为,例如,当点击提交按钮时阻止对表单的提交。相当于调用了event.preventDefault()方法。

「6、.self」

<div class="blue" @click.self="shout(2)">  
  <button @click="shout(1)">ok</button>  
</div>  

只当事件是从事件绑定的元素本身触发时才触发回调。

「7、.once」

<!-- 只能shout一次 -->  
<button @click.once="shout(1)">ok</button>  

绑定了事件以后只能触发一次,第二次就不会触发。

「8、.capture」

<!-- 打印顺序 1 2 4 3 -->  
<div @click.capture="shout(1)">  
      obj1  
      <div @click.capture="shout(2)">  
        obj2  
        <div @click="shout(3)">  
          obj3  
          <div @click="shout(4)">  
            obj4  
          </div>  
        </div>  
      </div>  
    </div>  

1和2为事件捕获,从外向内,4和3为事件冒泡,从内向外。事件触发从包含这个元素的顶层开始往下触发,也就是事件捕获。

「9、.passive」

<div v-on:scroll.passive="onScroll">...</div>  

监听元素滚动事件的时候,会一直触发onscroll事件,会让我们的网页变卡,因此我们使用这个修饰符的时候,相当于给onscroll事件整了一个.lazy修饰符。

「10、.native」

<My-component @click.native="shout(3)"></My-component>  

自定义组件必须使用.native来修饰这个click事件(即),可以理解为该修饰符的作用就是把一个vue组件转化为一个普通的HTML标签 注意:使用.native修饰符来操作普通HTML标签是会令事件失效的。

(3)、鼠标按钮修饰符

  • .left左键点击
  • .right右键点击
  • .middle 中键点击
<button @click.right="shout(1)">ok</button>  

(4)、键值修饰符

「11、.keyCode」

注意:这里的.keyCode代表键值

<input type="text" @keyup.keyCode="shout(4)">  

指定按下某一个键才触发这个shout的时候,这个修饰符就有用了。keyCode码如下:

keyCode

按键

48-57

0-9

65-90

a-z/A-Z

112-135

F1-F24

8

BackSpace(退格)

9

Tab

13

Enter(回车)

20

Caps_Lock(大写锁定)

32

Space(空格键)

37

Left(左箭头)

38

Up(上箭头)

39

Right(右箭头)

40

Down(下箭头)

vue给一些常用的键提供了别名:

//普通键  
.enter  
.tab  
.delete //(捕获“删除”和“退格”键)  
.space  
.esc  
.up  
.down  
.left  
.right  
  
  
//系统修饰键  
.ctrl  
.alt  
.meta  
.shift  

全局 config.keyCodes 对象自定义按键修饰符别名:

// 可以使用 `v-on:keyup.f1`  
Vue.config.keyCodes.f1=112  

<input type="text" @keyup.ctrl.67="shout(4)">  

将系统修饰键和其他键码链接起来使用,这样当我们同时按下ctrl+c时,就会触发keyup事件。

「12、.exact」

有些场景我们只需要或者只能按一个系统修饰键来触发。注意:「这个只是限制系统修饰键的。」

<button type="text" @click.ctrl.exact="shout(4)">ok</button>  

可以按下「ctrl+普通键」 来触发,但是不能按下「ctrl + 系统修饰键 +普通键」来触发。

「13、.sync」

更方便的使用prop进行“双向绑定”。

<!DOCTYPE html>  
<html lang="en">  
  
<head>  
    <meta charset="UTF-8">  
    <title>Title</title>  
    <style> #app {  
            margin: 10px auto;  
            width: 200px;  
            height: 200px;  
        }  
  
        input {  
            width: 200px;  
            height: 30px;  
            border: 1px solid red;  
            outline: none;  
        }  
  
        .show {  
            width: 200px;  
            height: 200px;  
            background: orange;  
            border: 1px solid red;  
            border-top: none;  
        } </style>  
    <script src="https://unpkg.com/vue@2.6.11/dist/vue.js"></script>  
</head>  
  
<body>  
    <div id="app">  
        <costum-show :is-show1.sync="isShow"></costum-show>  
        <div class="show" v-show="isShow"></div>  
    </div>  
    <script> Vue.component('costum-show', {  
            props: ['isShow'],  
            template: `  
             <div>  
                  <input type="text" val="" @click="showHandle">  
             </div>  
        `,  
            methods: {  
                showHandle() {  
                    this.$emit("update:is-show1", !this.isShow);  
                }  
            }  
        })  
        var vm=new Vue({  
            el: '#app',  
            data: {  
                isShow: false  
            }  
  
        }) </script>  
</body>  
  
</html>  

1、使用.sync的时候,子组件传递的事件名必须为update:value,其中value与父组件绑定属性的值必须一致(如上例中的is-show1) 2、注意带有.sync修饰符的 v-bind不能和表达式一起使用 (例如v-bind:title.sync='yy=0?1:0' 是无效的)。取而代之的是,你只能提供你想要绑定的属性名,类似v-model。3、将 v-bind.sync用在一个字面量的对象上,例如v-bind.sync=”{ title: doc.title }”,是无法正常工作的,因为在解析一个像这样的复杂表达式的时候,有很多边缘情况需要考虑。

「14、.prop」

  • 通过自定义属性存储变量,避免暴露数据
  • 防止污染 HTML 结构
<input id="uid" title="title1" value="1" :index.prop="index">  

「15、.camel」

<svg :viewBox="viewBox"></svg>  

实际上会渲染为

`<svg :viewbox="viewBox"></svg>`

SVG标签只认 viewBox,却不知道 viewbox 是什么?.camel修饰符,那它就会被渲染为驼峰名。使用字符串模版,则没有这些限制。

14、查找函数

使用Array的find()可以实现快速查找。

 const pets=[  
        {type:'Dog',name:'Max'},  
        {type:'Cat',name:'Karl'},  
        {type:'Dog',name:'Tommy'}  
    ]  
let pet=pets.find(pet=>pet.type==='Dog'&&pet.name==='Tommy');  
console.log(pet);// {type: "Dog", name: "Tommy"}

15、逐位运算符

console.log(Math.floor(4.9)) //4  
console.log(~~4.9);// 4  

16、递归函数

近许多小伙伴都在咨询微信打印如何设置,明明按照步骤操作了却用不了,那么接下来,小编就给大家详细的介绍下,微信打印设置的步骤和一些常见问题的解决方法,一起学习吧。


?


01

Tank 系列微信打印设置操作步骤

打印机激活

HP Smart Tank510系列为例,新装打印机处于未激活模式,首先连接上打印机网络。


打开HP Smart,添加设置新打印机,将打印机加入网络,并等待连接完成。


连接网络完成之后,HP Smart添加打印机成功表明激活完成。


激活微信云打印

确保打印机已连接到无线网络,打开HP Smart,点击打印机图标,进入打印机设置页面,点击“高级设置”进入打印机EWS界面。

点击打印机

高级设置

EWS

开启web服务,打开web服务选项,点击设置,进行开启。


打印信息页,等待二维码打印完成。


文件打印

打开微信扫一扫,选择绑定打印机。


绑定完成之后,选择文件打印,从聊天记录中选择,选择文件点击打印即可。


触摸屏激活方法

无线连接,点击无线信号图标-“设置”-“无线设置向导”进行网络连接。


在打印机屏幕找到web服务,然后点击图标,等待加载完成,点击“打印”即可打印出二维码。


02

2600/2700系列微信打印设置

无线激活

连接打印机网络,打开浏览器,输入IP地址进入打印机EWS后台。


点击“网络”-“无线”-“无线设置向导”进行网络连接,并输入PIN码以访问安全设置。

连接网络

输入PIN码

PIN码


选择无线网络进行连接,完成激活操作。


打印微信二维码

点击打印机图标,进入设置界面,选择高级设置进入EWS后台。

点击打印机

设置界面

EWS

选择WEB服务,点击打印信息页,输入打印机Pin码进行安全验证,然后点击“打印信息页”。


然后点击“打印信息页”等待打印完成。


文件打印


打开微信,扫一扫云打印二维码,选择绑定打印机。


选择文件打印,从聊天记录中选择,点击打印,等待打印完成。


虽然知道了如何来进行激活微信云打印,但是在设置的过程中总会遇到一些各种各样的问题导致操作失败,下面来总结几种比较常见的问题供大家参考。

打印机响应速度慢


决定打印机响应速度的因素主要是由文件大小、网络传输速度、服务器处理速度、打印机处理速度这几个因素决定的。


文件大小:文件越大,文件传传输服务器的速度越慢,建议文件大小控制在10M左右。


网络传输速度:直接关系着文件传输的快慢,建议将发送文件方和接收文件的打印机放置于良好的网络环境下。


服务器处理速度:微信打印时会先将发送方的文件接收至服务器处理,完成后再讲文件发送到打印机,如果服务器接收的文件太多,有时候会出现延迟或者速度变慢的现象,建议稍等片刻再使用微信打印。


打印机处理速度:打印机内存数据过多,造成打印机在处理打印任务时出现缓慢的现象。使用惠普连供打印机和家用喷墨打印机时,可以将打印机关机等待5-10分钟即可。


打印不出二维码


当二维码丢失想重新绑定打印机,按照正常步骤操作还打印不出二维码。建议重启路由或更换网络,恢复网络或出厂设置,重新操作。


检查是否网络有问题,重启路由器,或者更换网络环境(4g热点)进行打印操作。


恢复网络默认设置,或者出厂设置。

连接上打印机网络进入ews后台

打开设置选项,选择还原默认设置,进行网络还原或恢复出厂设置。


开启Web服务失败


新买回来的打印机在激活微信打印,开启Web服务时经常会遇到开启失败的问题,一般是由于以下几个原因导致的。


网络连接正常但是就会出现开启web服务失败的问题,建议打印出信息页,检查打印机是否在HP Connected上进行注册。如未注册,请登录www.hpconnected.com创建账户并注册打印机。


在开启Web服务时经常会碰到另一个人正在注册请稍后重试。是由于在开启Web服务时未成功,打印机未连接到服务器且更新不及时,导致第二次尝试会有此提示,出现这种情况建议删除WEB服务设置重新开启,或者将打印机重启等待5-10分钟在进行尝试。

删除WEB服务重新开启,手机连接上打印机网络,进入打印机EWS后台。

点击WEB服务,选择WEB服务设置-删除WEB服务,重新开启即可。


在开启web服务器发生网络问题时,打印网络测试页检查网络情况。

?检查网络情况,检查打印机无线键是否为常亮的状态,将打印机重新连接到无线网络上。

?重启路由器。

?更换网络进行尝试。

民新举措!

赣州中心城区

维修资金电子票据系统正式上线!

据悉,自2020年6月8日起,赣州市中心城区维修资金电子票据系统正式上线。今后,广大业主朋友们可以以通过微信、支付宝、赣服通、赣州通等扫一扫,体验到更加便捷的维修资金手机交存:业主交存维修资金后系统会自动发送信息给业主,自动推送维修资金电子票据,真正实现“足不出户”办理维修资金交存业务!

电子票是什么样子的呢?

一起来看看~

如何查询电子票据?

原来的纸制票据需要换成电子票据吗?

……

关于电子票据

你是否有很多疑问?

小编帮你解答!

1 如何查询电子票据?

一、通过住建局信息平台

http://218.64.195.220:333/,输入用户名、密码,登录后可以完善个人信息、修改密码,以及查看电子票据,也可下载及打印电子票据。

二、通过江西省非税收入收缴门户网站

http://59.55.120.163:7018/billcheck/html/index.html,登录后,输入“票据代码、电子票据号码及校验码”,可查看电子票据,也可下载及打印电子票据。

三、微信搜索查询“电子票夹”小程序,点击“手工查票”,输入“票据代码、电子票据号码及校验码”,点击“查找电子票”,即可查看电子票据,也可“保存至票夹”储存。

2 原来的纸制票据需要换成电子票据吗?

2020年6月8日前已交存维修资金的业主,已开具纸质的住宅专项维修资金专用收据,无需更换成电子票据,保存好纸质票据即可。

3 如何使用手机进行维修资金快捷交存呢?

自2019年2月15起,赣州市中心城区交存维修资金正式开通手机快捷交存,广大业主朋友们可以通过手机办理维修资金交存业务以及个人账户查询。

简而言之,办理快捷交存有两种类型:

一、2019年2月15日后通过系统打印《赣州市商品房买卖合同》的,合同封面就会有对应该合同维修资金交存的唯一二维码,直接扫一扫即可交存;

二、2019年2月15日前已打印《赣州市商品房买卖合同》但未交维修资金的业主,因合同封面没有维修资金交存二维码,则需扫描固定二维码(见下图)。

具体流程如下:

1.用微信或支付宝扫描《赣州市商品房买卖合同》封面上的二维码“扫码交存维修资金”;或者扫一扫固定二维码,输入合同编号、业主姓名、身份证号;

2.核对合同信息,点击【确认无误,交存】;

3.核对交存信息,填写业主【联系电话】;

4.附件上传或拍照身份证件正、反面,点击【获取验证码】,并输入;

5.完成后点击【立即支付】,弹出付款界面,完成支付;

6.交存完成后,您将收到短信,告知您的用户名及密码。您可通过住建局信息平台(http://218.64.195.220:333/),输入收到的用户名和密码,登录系统完善个人信息、修改密码,以及查看电子票据,也可下载及打印电子票据。

这下都明白了吧!转发扩散,让更多人知道!

来源:赣州市住房和城乡建设局、客家新闻网

见习编辑:李曦

编审:谢东宸

★一天169人被罚!赣州正在严查!还有两个重要提醒…

★对不起,我要回赣州了!

★接力对口支援!赣州又空降了40名“老俵”!

★赣州未来大可期!中国科学院稀土研究院已开始招生!

★赣州曝光3宗土地矿产资源违法违规典型案例

★酷夏难耐!赣州这些室内打卡地真是令人把持不住!

★赣州家长请留意,事关你家孩子每天乘坐的校车!

★重大调整!今年不将占道经营、流动商贩列为文明城市测评考核内容

★全国人大代表、赣州市委副书记、市长曾文明接受新华网专访

★赣州市人大常委会委员谭学忠接受审查调查