نحوه تعریف رویداد موس که تشخیص دهد چه زمانی هدف اسکرول کردن هست و یا کلیک

سلام دوستان من چند روزی است وقتم بی فایده داره صرف این میشه که برای پروژه ام که برای گوشی هست مشخص کنم. این را. یک سری دکمه دارم که چون زیاد هستند نیاز هست که اسکرول شوند ولی چون دکمه هستند لذا به اشاره و تاچ جواب میدهند. می خواهم تعریف خوبی براش داشته باشم که به مناسبترین شکل تشخیص بده که هدف از لمس اون کلیک هست یا اسکرول شدن. البته من این را با یک دستور شرطی که اگر موقعیت زمان mouse_down و mouse_up مساوی باشد یعنی رویداد کلیک اتفاق بیفتد. البته این کد خیلی خوب کار نمیکنه. چرا که موقع لمس صفحه برای کلیک احتمالا مقدار جزیی جابجایی خواهیم داشت که در این صورت رویداد کلیک اتفاق نمی افته در صورتی که باید اتفاق بیفته. لطفا راهنمایی کنید. خیلی با کدها ور رفتم ولی نتیجه مطلوبی نگرفتم. ممنونم
 

Fanous

Well-Known Member
سلام دوستان من چند روزی است وقتم بی فایده داره صرف این میشه که برای پروژه ام که برای گوشی هست مشخص کنم. این را. یک سری دکمه دارم که چون زیاد هستند نیاز هست که اسکرول شوند ولی چون دکمه هستند لذا به اشاره و تاچ جواب میدهند. می خواهم تعریف خوبی براش داشته باشم که به مناسبترین شکل تشخیص بده که هدف از لمس اون کلیک هست یا اسکرول شدن. البته من این را با یک دستور شرطی که اگر موقعیت زمان mouse_down و mouse_up مساوی باشد یعنی رویداد کلیک اتفاق بیفتد. البته این کد خیلی خوب کار نمیکنه. چرا که موقع لمس صفحه برای کلیک احتمالا مقدار جزیی جابجایی خواهیم داشت که در این صورت رویداد کلیک اتفاق نمی افته در صورتی که باید اتفاق بیفته. لطفا راهنمایی کنید. خیلی با کدها ور رفتم ولی نتیجه مطلوبی نگرفتم. ممنونم

سلام
من توی برنامه هام این مشکل رو با همون زمان شروع و پایان که گفتین حل کردم
به این شکل که وقتی صفحه لمس میشه، تابع مربوط به اسکرول اجرا میشه و در حین اسکرول بررسی میشه چه زمانی کاربر دستش رو برمیداره
اگر اختلاف زمان کمتر از 250 میلی ثانیه باشه عمل کلیک اتفاق می افته و تابع مربوطه اجرا میشه
البته اون جابجایی جزئی بعضی وقتها اتفاق می افته ، ولی توی عمل کلیک اختلالی ایجاد نمی کنه و تابع کلیک کار خودش رو انجام میده
 
آخرین ویرایش:

Fanous

Well-Known Member
من از این کدها استفاده می کنم که البته باید طبق برنامه خودتون تغییرشون بدین:

PHP:
stage.addEventListener(MouseEvent.MOUSE_DOWN, start_drag);
stage.addEventListener(MouseEvent.MOUSE_UP, stop_drag);
var start_date:Date= new Date();
var end_date:Date= new Date();
function start_drag(e:MouseEvent)
{
	start_date = new Date();
	stage.addEventListener(MouseEvent.MOUSE_MOVE, move_drag);
	// و در ادامه ، کدهای مربوط به شروع اسکرول
}
function stop_drag(e:MouseEvent)
{
	stage.removeEventListener(MouseEvent.MOUSE_MOVE, move_drag);
	end_date = new Date();
	var delta_date:Number;
	if (start_date.seconds == end_date.seconds)
	{
		delta_date = Number(end_date.milliseconds - start_date.milliseconds);
	}
	if (end_date.seconds > start_date.seconds)
	{
		delta_date=Number((1000*(end_date.seconds-start_date.seconds))+end_date.milliseconds-start_date.milliseconds);
	}
	if (end_date.seconds < start_date.seconds)
	{
		delta_date=Number(((end_date.minutes*60000)+(end_date.seconds*1000)+end_date.milliseconds)-((start_date.minutes*60000)+(start_date.seconds*1000)+start_date.milliseconds));
	}
	if (delta_date<200) // اگر مدت زمان تاچ کمتر از 200 میلی ثانیه باشه
	{
		//اجرای کدهای مربوط به کلیک
	}
	// و در ادامه ، کدهای مربوط به پایان اسکرول
}
function move_drag(e:MouseEvent)
{
	// کدهای مربوط به حرکت در زمان اسکرول
}
 
آخرین ویرایش:
سلام فانوس جان خیلی کارت درسته
این تابع زیر بنای اصلی یک برنامه اندروید میشه
 

Fanous

Well-Known Member
سلام فانوس جان خیلی کارت درسته
این تابع زیر بنای اصلی یک برنامه اندروید میشه

سلام دوست من
شما لطف دارین
وقتی ساخت اپلیکیشن رو شروع کردم ، دقیقا به همین نکته که فرمودین رسیدم و با سعی و خطای زیاد ، با این توابع کارمو راه انداختم
توی اپلیکیشن هام از همین توابع استفاده کردم
تنها موردی که نتونستم هنوز راه حلی واسش پیدا کنم ، اینه که موقع اسکرول ، وقتی تاچ تموم میشه ، صفحه به اسکرول ادامه بده و آروم آروم متوقف بشه
اگر کسی بتونه اینو هم درست کنه دیگه عالی میشه
 

mmz2006

Active Member
با سلام من کد شما رو برای اونی که می خواستین ارتقا دادم

فایل نمونه رو هم قرار دادم

ولی زیادی این کد ممکنه جان سیستم (خصوصا موبایل هایی با توانایی کمتر) رو بگیره و در اندازه های بزرگ یا حالت کم مصرف انرژی ، ریپ بزنه. و این نشون دهنده ضعف فلش و ایر ، در برنامه نویسی موبایله.

PHP:
stage.addEventListener(MouseEvent.MOUSE_DOWN, start_drag);
stage.addEventListener(MouseEvent.MOUSE_UP, stop_drag);
var start_date:Date= new Date();
var end_date:Date= new Date();

var left_screen:Number=0;
var right_screen:Number=360;
var speed:Number=0;//برای دریافت نقطه اول کشش انگشت
var space:Number=0;//فاصله نقطه اول تا نقطه نهایی برداشتن انگشت از صفحه
var upbool:Boolean = false;
var LOCKX:Number = 0;


function start_drag(e:MouseEvent)
{
	speed = mouseX ;
	upbool = false ;
	LOCKX = mouseX ;
    start_date = new Date();
    stage.addEventListener(MouseEvent.MOUSE_MOVE, move_drag);
	stage.addEventListener(Event.ENTER_FRAME, enter_frame_fun);
    // و در ادامه ، کدهای مربوط به شروع اسکرول
}
function stop_drag(e:MouseEvent)
{
	
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, move_drag);
    end_date = new Date();
    var delta_date:Number;
    if (start_date.seconds == end_date.seconds)
    {
        delta_date = Number(end_date.milliseconds - start_date.milliseconds);
    }
    if (end_date.seconds > start_date.seconds)
    {
        delta_date=Number((1000*(end_date.seconds-start_date.seconds))+end_date.milliseconds-start_date.milliseconds);
    }
    if (end_date.seconds < start_date.seconds)
    {
        delta_date=Number(((end_date.minutes*60000)+(end_date.seconds*1000)+end_date.milliseconds)-((start_date.minutes*60000)+(start_date.seconds*1000)+start_date.milliseconds));
    }
    if (delta_date<200) // اگر مدت زمان تاچ کمتر از 200 میلی ثانیه باشه
    {
        //اجرای کدهای مربوط به کلیک
    }
    // و در ادامه ، کدهای مربوط به پایان اسکرول
	upbool = true ;
}
function move_drag(e:MouseEvent)
{
	mc1.x += mouseX - LOCKX ;
	LOCKX = mouseX ;
    // کدهای مربوط به حرکت در زمان اسکرول
}


function enter_frame_fun(e:Event)
{
	if(upbool){
		mc1.x += space * 0.91;
		space *= 0.91;
		if(Math.abs(space)<0.1){
			stage.removeEventListener(Event.ENTER_FRAME, enter_frame_fun);
		}
	}else{
		space = mouseX - speed ;//هر چه سرعت لمس بیشتر باشد این متغیر مقدارش بیشتر است
		speed = mouseX ;
	}
	
	if(mc1.x -(mc1.width/2) > left_screen){
		mc1.x = left_screen +  (mc1.width/2) ;
	}else if(mc1.x +(mc1.width/2) < right_screen){
		mc1.x = right_screen -  (mc1.width/2) ;
	}

    // کدهای مربوط به حرکت در زمان اسکرول
}
 

پیوست ها

  • scroll touch.zip
    256.8 کیلوبایت · بازدیدها: 34

Fanous

Well-Known Member
با سلام من کد شما رو برای اونی که می خواستین ارتقا دادم

فایل نمونه رو هم قرار دادم

ولی زیادی این کد ممکنه جان سیستم (خصوصا موبایل هایی با توانایی کمتر) رو بگیره و در اندازه های بزرگ یا حالت کم مصرف انرژی ، ریپ بزنه. و این نشون دهنده ضعف فلش و ایر ، در برنامه نویسی موبایله.

PHP:
stage.addEventListener(MouseEvent.MOUSE_DOWN, start_drag);
stage.addEventListener(MouseEvent.MOUSE_UP, stop_drag);
var start_date:Date= new Date();
var end_date:Date= new Date();

var left_screen:Number=0;
var right_screen:Number=360;
var speed:Number=0;//برای دریافت نقطه اول کشش انگشت
var space:Number=0;//فاصله نقطه اول تا نقطه نهایی برداشتن انگشت از صفحه
var upbool:Boolean = false;
var LOCKX:Number = 0;


function start_drag(e:MouseEvent)
{
	speed = mouseX ;
	upbool = false ;
	LOCKX = mouseX ;
    start_date = new Date();
    stage.addEventListener(MouseEvent.MOUSE_MOVE, move_drag);
	stage.addEventListener(Event.ENTER_FRAME, enter_frame_fun);
    // و در ادامه ، کدهای مربوط به شروع اسکرول
}
function stop_drag(e:MouseEvent)
{
	
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, move_drag);
    end_date = new Date();
    var delta_date:Number;
    if (start_date.seconds == end_date.seconds)
    {
        delta_date = Number(end_date.milliseconds - start_date.milliseconds);
    }
    if (end_date.seconds > start_date.seconds)
    {
        delta_date=Number((1000*(end_date.seconds-start_date.seconds))+end_date.milliseconds-start_date.milliseconds);
    }
    if (end_date.seconds < start_date.seconds)
    {
        delta_date=Number(((end_date.minutes*60000)+(end_date.seconds*1000)+end_date.milliseconds)-((start_date.minutes*60000)+(start_date.seconds*1000)+start_date.milliseconds));
    }
    if (delta_date<200) // اگر مدت زمان تاچ کمتر از 200 میلی ثانیه باشه
    {
        //اجرای کدهای مربوط به کلیک
    }
    // و در ادامه ، کدهای مربوط به پایان اسکرول
	upbool = true ;
}
function move_drag(e:MouseEvent)
{
	mc1.x += mouseX - LOCKX ;
	LOCKX = mouseX ;
    // کدهای مربوط به حرکت در زمان اسکرول
}


function enter_frame_fun(e:Event)
{
	if(upbool){
		mc1.x += space * 0.91;
		space *= 0.91;
		if(Math.abs(space)<0.1){
			stage.removeEventListener(Event.ENTER_FRAME, enter_frame_fun);
		}
	}else{
		space = mouseX - speed ;//هر چه سرعت لمس بیشتر باشد این متغیر مقدارش بیشتر است
		speed = mouseX ;
	}
	
	if(mc1.x -(mc1.width/2) > left_screen){
		mc1.x = left_screen +  (mc1.width/2) ;
	}else if(mc1.x +(mc1.width/2) < right_screen){
		mc1.x = right_screen -  (mc1.width/2) ;
	}

    // کدهای مربوط به حرکت در زمان اسکرول
}

سلام دوست من
خیلی ممنون
من تازه فرصت کردم که کد شمارو تست کردم
خیلی خوب بود
دقیقا همونی بود که فکرشو میکردم
موفق باشین
 

جدیدترین ارسال ها

بالا