我正在尝试为CRT类型效果创建一个简单的jquery插件。我检查了文档 - > https://learn.jquery.com/plugins/basic-plugin-creation/但我想我不明白。
当我执行代码而不将其转换为插件时,它可以正常工作。
\unnnn
当我把它变成插件时,它什么都不做。
setInterval(function(){
$('#wallpaper').css("filter", "opacity("+ String(Math.random() * (0.96 - 1.0) + 0.96 ) +")");
}, (Math.random() * (500 - 1000) + 100) );
当我将$.fn.crt = function(){
setInterval(function(){
$(this).css("filter", "opacity("+ String(Math.random() * (0.96 - 1.0) + 0.96 ) +")");
}, (Math.random() * (500 - 1000) + 100) );
}
console.log($('#wallpaper').crt());
更改为$(this).css()...
时,它会出现以下错误:this.css()...
有谁能告诉我如何让这个代码在插件中工作或者我做错了什么?
答案 0 :(得分:1)
this
不是你想象的那样。它将是窗口对象。您需要bind()
匿名函数或使用经典的闭包技术来定义外部变量。
$.fn.crt = function(){
var that = $(this);
setInterval(function(){
that.css("filter", "opacity("+ String(Math.random() * (0.96 - 1.0) + 0.96 ) +")");
}, (Math.random() * (500 - 1000) + 100) );
}